Spring MVC的配置数据源bean(Spring 3.0的,休眠,Apache Tomcat上,Netbeans的) [英] Spring MVC Configuring Data Source Bean (Spring 3.0,Hibernate,Apache Tomcat, Netbeans)
问题描述
我试图运行/设置一个简单的Spring MVC 3 +休眠+的Apache Tomcat 7.0,使用NetBeans 7.1作为开发环境。
Netbeans的带有prepackaged Spring和Hibernate文件/罐/依赖条件已经安装在正确的目录结构。
为了设置中的applicationContext数据源bean我有2个选择
变#1
(使用数据源类=org.springframework.jdbc.datasource.DriverManagerDataSource,这是prepackaged数据与NetBeans为Spring开发源)
从片段的applicationContext.xml
<! - 声明具有汇集能力的数据源 - >
<豆ID =数据源级=org.springframework.jdbc.datasource.DriverManagerDataSource
破坏法=关闭号码:driverClass =com.mysql.jdbc.Driver
电话号码:JDBCURL =的jdbc:mysql的://本地主机:3306 / yourmarketnet
电话号码:用户=根
号码:密码=arya6678
电话号码:acquireIncrement =5
电话号码:idleConnectionTestPeriod =60
电话号码:maxPoolSize =100
电话号码:maxStatements =50
电话号码:了MinPoolSize =10/>
<! - 声明Hibernate的SessionFactory检索的Hibernate Session - >
<豆的id =SessionFactory的阶级=org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
<属性名=数据源REF =数据源/>
<属性名=configLocationREF =类路径:hibernate.cfg.xml中/>
<属性名=packagesToScan值=。com.yourmarketnet */>
< /豆>
2的变化,错误结果:
我的应用程序无法运行,Apache Tomcat上日志:
org.springframework.beans.factory.BeanCreationException:错误创建与ServletContext的资源定义名称数据源豆[/WEB-INF/applicationContext.xml的]:错误设置属性值;嵌套的例外是org.springframework.beans.NotWritablePropertyException:bean类[org.springframework.jdbc.datasource.DriverManagerDataSource]的无效属性acquireIncrement':Bean属性acquireIncrement'不可写无效或者和setter方法。请问参数类型二传手的配合吸气的返回类型?
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
在org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
在org.springframework.beans.factory.support.DefaultListableBeanFactory.$p$pInstantiateSingletons(DefaultListableBeanFactory.java:585)
在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
在org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
在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.FutureTask.run(FutureTask.java:166)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
在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方法。请问参数类型二传手的配合吸气的返回类型?
在org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052)
在org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921)
在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
在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下议院DBCP罐子,我添加了公地DBCP-1.4.jar我的项目。
从片段的applicationContext.xml
<! - 声明具有汇集能力的数据源 - >
<豆ID =数据源级=org.apache.commons.dbcp.BasicDataSource
破坏法=关闭号码:driverClass =com.mysql.jdbc.Driver
电话号码:JDBCURL =的jdbc:mysql的://本地主机:3306 / yourmarketnet
电话号码:用户=根
号码:密码=arya6678
电话号码:acquireIncrement =5
电话号码:idleConnectionTestPeriod =60
电话号码:maxPoolSize =100
电话号码:maxStatements =50
电话号码:了MinPoolSize =10/>
<! - 声明Hibernate的SessionFactory检索的Hibernate Session - >
<豆的id =SessionFactory的阶级=org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
<属性名=数据源REF =数据源/>
<属性名=configLocationREF =类路径:hibernate.cfg.xml中/>
<属性名=packagesToScan值=。com.yourmarketnet */>
< /豆>
2的变化,错误结果:
我的应用程序无法运行,Apache Tomcat上日志:
org.springframework.beans.factory.BeanCreationException:错误创建与ServletContext的资源定义名称数据源豆[/WEB-INF/applicationContext.xml的]:错误设置属性值;嵌套的例外是org.springframework.beans.NotWritablePropertyException:bean类[org.apache.commons.dbcp.BasicDataSource]的无效属性acquireIncrement':Bean属性acquireIncrement'不可写无效或者和setter方法。请问参数类型二传手的配合吸气的返回类型?
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
在org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
在org.springframework.beans.factory.support.DefaultListableBeanFactory.$p$pInstantiateSingletons(DefaultListableBeanFactory.java:585)
在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
在org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
在org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
在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.FutureTask.run(FutureTask.java:166)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
在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方法。请问参数类型二传手的配合吸气的返回类型?
在org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052)
在org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921)
在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76)
在org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
...... 21多个
的P命名空间(号码:用户
,号码:密码
,号码:acquireIncrement
)用来设置你的Java bean的属性。它看起来像你想设置的 acquireIncrement
属性 org.apache.commons.dbcp.BasicDataSource
和 org.springframework.jdbc.datasource.DriverManagerDataSource
类。根据这些类的文档(的Apache下议院DBCP 一>和<一个href=\"http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jdbc/datasource/DriverManagerDataSource.html\"相对=nofollow> Spring的数据源),这些都不具有这个属性这就是为什么你看到NotWritablePropertyException在你的堆栈跟踪setter方法。
退房的<一个href=\"http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-p-namespace\"相对=nofollow> Spring的关于p名称空间了解配置文档。
如果我选择了,我会选Apache的数据库连接池(DBCP)。简单&安培;很好用的。</ P>
I’m trying to run/setup a simple Spring MVC 3 + Hibernate + Apache Tomcat 7.0, using NetBeans 7.1 as a development environment.
Netbeans comes with prepackaged Spring and Hibernate files/jars/dependecies already setup in the right directory structure.
In order to setup the data source bean in applicationContext I had 2 choices
Variation #1 (using data source class="org.springframework.jdbc.datasource.DriverManagerDataSource" which was prepackaged data source with NetBeans for Spring development)
Snippet from 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>
Variation 2, Error result: My Application fails to run, Apache Tomcat Log:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'acquireIncrement' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Bean property 'acquireIncrement' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'acquireIncrement' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Bean property 'acquireIncrement' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
Variation #2
(using data source class=" org.apache.commons.dbcp.BasicDataSource")
Then I decided to download Apache Commons dbcp jar , and I added the "commons-dbcp-1.4.jar" to my project.
Snippet from 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>
Variation 2, Error result: My Application fails to run, Apache Tomcat Log:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'acquireIncrement' of bean class [org.apache.commons.dbcp.BasicDataSource]: Bean property 'acquireIncrement' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'acquireIncrement' of bean class [org.apache.commons.dbcp.BasicDataSource]: Bean property 'acquireIncrement' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:921) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358) ... 21 more
The p namespace (p:user
, p:password
, p:acquireIncrement
) is used to set properties on your java beans. It looks like you are trying to set the acquireIncrement
property on the org.apache.commons.dbcp.BasicDataSource
and org.springframework.jdbc.datasource.DriverManagerDataSource
classes. According to the documentation for these classes (Apache Commons DBCP and Spring's Data Source), neither of these have a setter method for this property which is why you see the NotWritablePropertyException in your stacktrace.
Check out the Spring's docs regarding the p-namespace about configuration.
If I were choosing, I would pick Apache's data base connection pool (dbcp). Simple & well used.
这篇关于Spring MVC的配置数据源bean(Spring 3.0的,休眠,Apache Tomcat上,Netbeans的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!