嗨,我正在尝试使用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 config 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:无法
自动连线栏位:私人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字段:私有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时出错
资源[/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
资源[/WEB-INF/spring-servlet.xml]:设置属性值时出错;
嵌套异常为
org.springframework.beans.NotWritablePropertyException:无效
bean类的属性“ jdbc / pluto”
[org.springframework.jndi.JndiObjectFactoryBean]:Bean属性
'jdbc / pluto'不可写或具有无效的setter方法。是否
setter的参数类型与getter的返回类型匹配吗?

最佳答案

你有这样的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好像是要setJndiName()超类的JndiObjectLocator方法。

所以你的豆子看起来应该像

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

关于spring - Spring jndi数据源设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16466759/

10-12 19:54