spring jndi数据源设置

Aad*_*dam 2 spring jndi datasource spring-mvc

您好我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

在spring-servlet配置bean中:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/>
        </bean>
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

org.springframework.beans.factory.BeanCreationException:创建名为'contactController'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private app.contact.service.ContactService app.contact.controller.ContactController.contactService; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'contactServiceImpl'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private app.contact.dao.ContactDAO app.contact.service.ContactServiceImpl.contactDAO; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'contactDAOImpl'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private org.hibernate.SessionFactory app.contact.dao.ContactDAOImpl.sessionFactory; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/spring-servlet.xml]中定义名为'sessionFactory'的bean时出错:在设置bean属性时无法解析对bean'DataSource'的引用'数据源'; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB-INF/spring-servlet.xml]中定义名称为'dataSource'的bean时出错:设置属性值时出错; 嵌套异常是org.springframework.beans.NotWritablePropertyException:bean类的无效属性'jdbc/pluto'[org.springframework.jndi.JndiObjectFactoryBean]:Bean属性'jdbc/pluto'不可写或具有无效的setter方法.setter的参数类型是否与getter的返回类型匹配?相关原因:org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/spring-servlet.xml]中定义创建名为'dataSource'的bean时出错:设置属性值时出错; 嵌套异常是org.springframework.beans.NotWritablePropertyException:bean类的无效属性'jdbc/pluto'[org.springframework.jndi.JndiObjectFactoryBean]:Bean属性'jdbc/pluto'不可写或具有无效的setter方法.setter的参数类型是否与getter的返回类型匹配?

Sot*_*lis 9

你有一个bean定义

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

属性名称jdbc/pluto应该与setter匹配,因此Spring期望类似setJdbc/Pluto()但是这显然不是正确的java语法.

看着JndiObjectFactoryBean它看起来你想要超类的setJndiName()方法JndiObjectLocator.

所以你的bean应该是这样的

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/pluto"/>
</bean>
Run Code Online (Sandbox Code Playgroud)