spring jndi数据源设置

时间:2013-05-09 16:39:26

标签: spring spring-mvc datasource jndi

您好我正在尝试使用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的返回类型匹配?

1 个答案:

答案 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>