簡體   English   中英

Spring MVC配置數據源Bean(Spring 3.0,Hibernate,Apache Tomcat,Netbeans)

[英]Spring MVC Configuring Data Source Bean (Spring 3.0,Hibernate,Apache Tomcat, Netbeans)

我正在嘗試使用NetBeans 7.1作為開發環境來運行/設置一個簡單的Spring MVC 3 + Hibernate + Apache Tomcat 7.0。

Netbeans附帶了已經在正確的目錄結構中設置的預打包的Spring和Hibernate文件/ jar / dependecies。

為了在applicationContext中設置數據源bean,我有2個選擇


變體1 (使用數據源類=“ org.springframework.jdbc.datasource.DriverManagerDataSource”,它是與NetBeans預打包的數據源,用於Spring開發)

來自applicationContext.xml的代碼段

<!-- Declare a datasource that has pooling capabilities-->  
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"    
destroy-method="close"    p:driverClass="com.mysql.jdbc.Driver"    
p:jdbcUrl="jdbc:mysql://localhost:3306/yourmarketnet"   
p:user="root"    
p:password="arya6678"   
p:acquireIncrement="5"    
p:idleConnectionTestPeriod="60"    
p:maxPoolSize="100"    
p:maxStatements="50"    
p:minPoolSize="10" /> 
<!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->   
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">    
<property name="dataSource" ref="dataSource"/>    
<property name="configLocation" ref="classpath:hibernate.cfg.xml"/>    
<property name="packagesToScan" value="com.yourmarketnet.*" />
</bean>

變體2,錯誤結果:我的應用程序無法運行,Apache Tomcat日志:

org.springframework.beans.factory.BeanCreationException:創建在ServletContext資源[/WEB-INF/applicationContext.xml]中定義的名稱為'dataSource'的bean時出錯:設置屬性值時出錯; 嵌套的異常是org.springframework.beans.NotWritablePropertyException:Bean類[org.springframework.jdbc.datasource.DriverManagerDataSource]的無效屬性'acquireIncrement':Bean屬性'acquireIncrement'是不可寫的或具有無效的setter方法。 setter的參數類型是否與getter的返回類型匹配? 在org.springframey.beans的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)處。 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)的.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject( org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)的org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)的AbstractBeanFactory.java:293) .springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) 在org.springframework.context.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)在org.springframework.context.support.AbstractApplicationContext org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)處的.refresh(AbstractApplicationContext.java:425)。 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)處的springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)at org.apache.catalina.core.StandardContext $ 1.call(StandardContext .java:5226),位於org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5221),位於java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)上的java.util.concurrent.FutureTask.run(FutureTask.java:166)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 603)在java.lang.Thread.run(Thread.java:722)由以下原因引起:org.springframework.beans.NotWritablePropertyException:Bean類[org.springframework.jdbc.datasource.DriverManagerDataSource]的無效屬性'acquireIncrement':Bean屬性'acquireIncrement'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型匹配? 在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(Abstract.org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) )在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)

變體#2
(使用數據源類=“ org.apache.commons.dbcp.BasicDataSource”)然后,我決定下載Apache Commons dbcp jar,並將“ commons-dbcp-1.4.jar”添加到我的項目中。

來自applicationContext.xml的代碼段

<!-- Declare a datasource that has pooling capabilities-->  
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    
destroy-method="close"    p:driverClass="com.mysql.jdbc.Driver"    
p:jdbcUrl="jdbc:mysql://localhost:3306/yourmarketnet"   
p:user="root"    
p:password="arya6678"   
p:acquireIncrement="5"    
p:idleConnectionTestPeriod="60"    
p:maxPoolSize="100"    
p:maxStatements="50"    
p:minPoolSize="10" /> 
<!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->   
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">    
<property name="dataSource" ref="dataSource"/>    
<property name="configLocation" ref="classpath:hibernate.cfg.xml"/>    
<property name="packagesToScan" value="com.yourmarketnet.*" />
</bean>

變體2,錯誤結果:我的應用程序無法運行,Apache Tomcat日志:

org.springframework.beans.factory.BeanCreationException:創建在ServletContext資源[/WEB-INF/applicationContext.xml]中定義的名稱為'dataSource'的bean時出錯:設置屬性值時出錯; 嵌套的異常是org.springframework.beans.NotWritablePropertyException:Bean類[org.apache.commons.dbcp.BasicDataSource]的無效屬性'acquireIncrement':Bean屬性'acquireIncrement'是不可寫的或具有無效的setter方法。 setter的參數類型是否與getter的返回類型匹配? 在org.springframey.beans的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)處。 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)的.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject( org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)的org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)的AbstractBeanFactory.java:293) .springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) 在org.springframework.context.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)在org.springframework.context.support.AbstractApplicationContext org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)處的.refresh(AbstractApplicationContext.java:425)。 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)處的springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)at org.apache.catalina.core.StandardContext $ 1.call(StandardContext .java:5226),位於org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5221),位於java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)上的java.util.concurrent.FutureTask.run(FutureTask.java:166)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 603)在java.lang.Thread.run(Thread.java:722)由以下原因引起:org.springframework.beans.NotWritablePropertyException:Bean類[org.apache.commons.dbcp.BasicDataSource]的無效屬性'acquireIncrement':Bean屬性'acquireIncrement'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型匹配? 在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(Abstract.org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) )at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)... 21更多

您是否有特定問題,或者只是不理解錯誤? 消息非常清晰:acquireIncrement不是您要設置其的類的屬性。 我相信該屬性來自C3P0連接池。

p名稱空間( p:userp:passwordp:acquireIncrement )用於設置Java Bean上的屬性。 似乎您正在嘗試在org.apache.commons.dbcp.BasicDataSourceorg.springframework.jdbc.datasource.DriverManagerDataSource類上設置acquireIncrement屬性。 根據這些類的文檔( Apache Commons DBCPSpring的Data Source ),這兩個類都不具有此屬性的setter方法,這就是為什么您在堆棧跟蹤中看到NotWritablePropertyException的原因。

查看關於配置的p命名空間Spring文檔

如果選擇的話,我將選擇Apache的數據庫連接池(dbcp)。 簡單且使用良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM