我正在尝试运行/设置一个简单的 Spring MVC 3 + Hibernate + Apache Tomcat 7.0,使用 NetBeans 7.1 作为开发环境。
Netbeans 带有预先打包的 Spring 和 Hibernate 文件/jars/依赖项,这些文件/jars/依赖项已经设置在正确的目录结构中。
为了在 applicationContext 中设置数据源 bean,我有 2 个选择
变体 #1 (使用数据源类=“org.springframework.jdbc.datasource.DriverManagerDataSource”,它是用于 Spring 开发的 NetBeans 预打包数据源)
来自 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 的参数类型是否与 getter 的返回类型匹配?在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java: 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 在 java.util.concurrent.FutureTask.run(FutureTask.java:166) 在 java.util.concurrent 调用(StandardContext.java:5221) .ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) 由:org。 springframework.beans.NotWritablePropertyException:bean 类 [org.springframework.jdbc.datasource.DriverManagerDataSource] 的属性“acquireIncrement”无效:Bean 属性“acquireIncrement”不可写或设置方法无效。setter 的参数类型是否与 getter 的返回类型匹配?在 org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) 在 org.
Variation #2
(using data source class="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.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086) 在 org. 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) at java.lang.Thread.run(Thread.java:722) 原因:org.springframework.beans.NotWritablePropertyException:bean 的无效属性“acquireIncrement”类 [org.apache.commons.dbcp.BasicDataSource]:Bean 属性“acquireIncrement”不可写或设置方法无效。setter 的参数类型是否与 getter 的返回类型匹配?在 org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1052) 在 org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java: