2013-05-09 106 views
2

嗨,我想使用jndi數據源。下面是彈簧servlet配置bean中的代碼春季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> 

是:

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

我收到此錯誤

org.springframework。 beans.factory.BeanCreationException:錯誤 使用名稱創建bean 'contactController':注入自動線 依賴關係失敗;嵌套的異常是 org.springframework.beans.factory.BeanCreationException:不能 自動裝入字段:私人app.contact.service.ContactService app.contact.controller.ContactController.contactService;嵌套0​​異常是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:注入自動裝配的 依賴關係失敗;嵌套的異常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private 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';嵌套0​​異常是org.springframework.beans.factory.BeanCreationException: 在ServletContext中定義的名稱爲'dataSource'的bean時出錯Error資源[/WEB-INF/spring-servlet.xml]:設置屬性值時出錯; 嵌套的異常是 org.springframework.beans.NotWritablePropertyException:豆類的無效 屬性「JDBC /冥王星」 [org.springframework.jndi.JndiObjectFactoryBean]:Bean屬性 「JDBC /冥王星」不可寫或有一個無效的setter方法。設置器的 參數類型是否與getter的返回類型相匹配? 相關原因: org.springframework.beans.factory.BeanCreationException:錯誤 在ServletContext中定義名稱爲'dataSource'的bean創建資源[/WEB-INF/spring-servlet.xml]:設置屬性值時出錯; 嵌套的異常是 org.springframework.beans.NotWritablePropertyException:豆類的無效 屬性「JDBC /冥王星」 [org.springframework.jndi.JndiObjectFactoryBean]:Bean屬性 「JDBC /冥王星」不可寫或有一個無效的setter方法。設置器的 參數類型是否與getter的返回類型相匹配?

+0

字段不能有名字'JDBC/pluto'。 – 2013-05-09 17:42:47

回答

9

你有一個bean定義爲這樣

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

屬性名稱jdbc/pluto應該匹配二傳手,所以春季預計類似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>