Spring MVC的配置数据源bean(Spring 3.0的,休眠,Apache Tomcat上,Netbeans的) [英] Spring MVC Configuring Data Source Bean (Spring 3.0,Hibernate,Apache Tomcat, Netbeans)

查看:502
本文介绍了Spring MVC的配置数据源bean(Spring 3.0的,休眠,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆