2013-05-09 107 views
2

嗨,我想使用jndi数据源。下面是弹簧servlet配置bean中的代码春季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> 

是:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
      <property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/> 
     </bean> 

我收到此错误

org.springframework。 beans.factory.BeanCreationException:错误 使用名称创建bean 'contactController':注入自动线 依赖关系失败;嵌套的异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装入字段:私人app.contact.service.ContactService app.contact.controller.ContactController.contactService;嵌套0​​异常是org.springframework.beans.factory.BeanCreationException: 创建名为'contactServiceImpl'的bean时出错:注入 自动装配依赖性失败;嵌套的异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:私人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';嵌套0​​异常是org.springframework.beans.factory.BeanCreationException: 在ServletContext中定义的名称为'dataSource'的bean时出错Error资源[/WEB-INF/spring-servlet.xml]:设置属性值时出错; 嵌套的异常是 org.springframework.beans.NotWritablePropertyException:豆类的无效 属性“JDBC /冥王星” [org.springframework.jndi.JndiObjectFactoryBean]:Bean属性 “JDBC /冥王星”不可写或有一个无效的setter方法。设置器的 参数类型是否与getter的返回类型相匹配? 相关原因: org.springframework.beans.factory.BeanCreationException:错误 在ServletContext中定义名称为'dataSource'的bean创建资源[/WEB-INF/spring-servlet.xml]:设置属性值时出错; 嵌套的异常是 org.springframework.beans.NotWritablePropertyException:豆类的无效 属性“JDBC /冥王星” [org.springframework.jndi.JndiObjectFactoryBean]:Bean属性 “JDBC /冥王星”不可写或有一个无效的setter方法。设置器的 参数类型是否与getter的返回类型相匹配?

+0

字段不能有名字'JDBC/pluto'。 – 2013-05-09 17:42:47

回答

9

你有一个bean定义为这样

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/> 
</bean> 

属性名称jdbc/pluto应该匹配二传手,所以春季预计类似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>