首页 文章

spring jndi数据源设置

提问于
浏览
2

您好我正在尝试使用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:无法自动装配字段: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的返回类型匹配?

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

    所以你的bean应该是这样的

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

相关问题