2

您好我正在尝试使用 jndi 数据源。下面是代码

上下文.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:无法自动装配字段:私有 app.contact.service.ContactService app.contact.controller.ContactController.contactService;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“contactServiceImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 app.contact.dao.ContactDAO app.contact.service.ContactServiceImpl.contactDAO;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“contactDAOImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 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 类 [org.springframework.jndi.JndiObjectFactoryBean] 的无效属性“jdbc/pluto”:bean 属性“jdbc/pluto”不可写或具有无效的 setter 方法。setter 的参数类型是否与 getter 的返回类型匹配?相关原因:org.springframework.beans.factory.BeanCreationException:在 ServletContext 资源 [/WEB-INF/spring-servlet.xml] 中创建名称为“dataSource”的 bean 时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.NotWritablePropertyException:bean 类 [org.springframework.jndi.JndiObjectFactoryBean] 的无效属性“jdbc/pluto”:bean 属性“jdbc/pluto”不可写或具有无效的 setter 方法。

4

1 回答 1

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它看起来你想要超类的setJndiName()方法。JndiObjectLocator

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

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/pluto"/>
</bean>
于 2013-05-09T17:46:21.577 回答