您好我正在尝试使用jndi数据源。下面是代码
context.xml中
<Context antiJARLocking="true" path="/SpringMVCTest">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="20" maxIdle="10" maxWait="10000"
name="jdbc/pluto" password=""
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/spring?zeroDateTimeBehavior=convertToNull"
username="pluto"/>
</Context>
spring-servlet配置bean中的是:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/>
</bean>
我收到此错误
org.springframework.beans.factory.BeanCreationException:错误 创建名为'contactController'的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private app.contact.service.ContactService app.contact.controller.ContactController.contactService;嵌套 异常是org.springframework.beans.factory.BeanCreationException: 创建名为'contactServiceImpl'的bean时出错:注入 自动连接依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private app.contact.dao.ContactDAO app.contact.service.ContactServiceImpl.contactDAO;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为'contactDAOImpl'的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private org.hibernate.SessionFactory app.contact.dao.ContactDAOImpl.sessionFactory;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 在ServletContext中定义名为'sessionFactory'的bean 资源[/WEB-INF/spring-servlet.xml]:无法解析引用 设置bean属性'dataSource'时bean'dataSource';嵌套 异常是org.springframework.beans.factory.BeanCreationException: 在ServletContext中定义名为'dataSource'的bean时出错 resource [/WEB-INF/spring-servlet.xml]:设置属性值时出错; 嵌套异常是 org.springframework.beans.NotWritablePropertyException:无效 bean类的属性'jdbc / pluto' [org.springframework.jndi.JndiObjectFactoryBean]:Bean属性 'jdbc / pluto'不可写或具有无效的setter方法。是吗? setter的参数类型与getter的返回类型匹配? 相关原因: org.springframework.beans.factory.BeanCreationException:错误 在ServletContext中定义名为'dataSource'的bean resource [/WEB-INF/spring-servlet.xml]:设置属性值时出错; 嵌套异常是 org.springframework.beans.NotWritablePropertyException:无效 bean类的属性'jdbc / pluto' [org.springframework.jndi.JndiObjectFactoryBean]:Bean属性 'jdbc / pluto'不可写或具有无效的setter方法。是吗? setter的参数类型与getter的返回类型匹配?
答案 0 :(得分:9)
你有一个bean定义
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/>
</bean>
属性名称jdbc/pluto
应该与setter匹配,因此Spring期望像setJdbc/Pluto()
这样的东西,但这显然不是正确的java语法。
查看JndiObjectFactoryBean
,看起来您需要JndiObjectLocator
超类setJndiName()
方法。
所以你的bean看起来应该是
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/pluto"/>
</bean>