spring jndi 数据源设置
Posted
技术标签:
【中文标题】spring jndi 数据源设置【英文标题】:spring jndi datasource setup 【发布时间】:2013-05-04 05:21:19 【问题描述】:您好,我正在尝试使用 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 字段:私有 app.contact.service.ContactService app.contact.controller.ContactController.contactService;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“contactServiceImpl”的 bean 时出错:注入 自动装配依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire 字段:私有 app.contact.dao.ContactDAO app.contact.service.ContactServiceImpl.contactDAO;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为 'contactDAOImpl' 的 bean:注入 autowired 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:私有 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 的参数类型是否匹配 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的参数类型和getter的返回类型是否匹配?
【问题讨论】:
字段不能有名称jdbc/pluto
。
【参考方案1】:
你有一个这样的 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>
【讨论】:
以上是关于spring jndi 数据源设置的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot - 外部 Tomcat - JNDI 数据源