繁体   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