如何为连接池配置Hibernate,Spring和Apache dbcp? [英] How to configure Hibernate, Spring and Apache dbcp for connection pooling?
问题描述
我有一个集成Spring,Hibernate和Apache DBCP的问题。我使用了这里的 DBCPConnectionProvider
。
我对以上所述的xml配置如下所示。
< context:component-scan base-package =com.my.app/>
< tx:annotation-driven />
< bean id =sessionFactoryclass =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
< property name =packagesToScan>
< list>
<值> com.my.app.model< /值>
< / list>
< / property>
< property name =configurationClassvalue =org.hibernate.cfg.AnnotationConfiguration/>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< prop key =hibernate.hbm2ddl.auto> update< / prop>
< prop key =hibernate.connection.driver_class> com.mysql.jdbc.Driver< / prop>
< prop key =hibernate.connection.url> jdbc:mysql:// localhost:3306 / app< / prop>
< prop key =hibernate.connection.username> foo< / prop>
< prop key =hibernate.connection.password> bar< / prop>
< prop key =hibernate.connection.provider_class> org.hibernate.connection.DBCPConnectionProvider< / prop>
<! - 连接池相关属性 - >
< prop key =hibernate.dbcp.initialSize> 8< / prop>
< prop key =hibernate.dbcp.maxActive> 20< / prop>
< prop key =hibernate.dbcp.maxIdle> 5< / prop>
< prop key =hibernate.dbcp.minIdle> 0< / prop>
< prop key =hibernate.dbcp.maxWait> 10000< / prop>
< prop key =hibernate.dbcp.minEvictableIdleTimeMillis> 180000< / prop>
< prop key =hibernate.dbcp.timeBetweenEvictionRunsMillis> 180000< / prop>
< prop key =hibernate.dbcp.testWhileIdle> true< / prop>
< prop key =hibernate.dbcp.testOnReturn> true< / prop>
< prop key =hibernate.dbcp.validationQuery> select 1< / prop>
< /道具>
< / property>
< / bean>
< bean id =transactionManager
class =org.springframework.orm.hibernate3.HibernateTransactionManager>
< property name =sessionFactoryref =sessionFactory/>
< / bean>
当数据库模式(即 app
)为空两个表将在mysql中创建。但是我在前面提到的 DBCPConnectionProvider
的getConnection()方法中得到了 NullPointerException
。这意味着dataSource没有实例化。我想我已经在xml中配置了一切。我错过了什么。如何使用Spring和Hibernate配置DBCP 1.4版本?请提供您的见解。
以下是堆栈跟踪:
产生的原因:在org.hibernate.connection.DBCPConnectionProvider.getConnection显示java.lang.NullPointerException
(DBCPConnectionProvider.java:209)在org.hibernate.jdbc.ConnectionManager.openConnection
(ConnectionManager.java:417)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
。在org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
处org.springframework org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
。 orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555)
... 82 more
不要这样做。配置你想在Spring和Hibernate中使用的数据源。沟通 hibernate.dbcp
和 hibernate.connection
属性。
< bean id =dataSourceclass =org.apache.commons.dbcp.BasicDataSourcedestroy-method =靠近>
< property name =driverClassNamevalue =com.mysql.jdbc.Driver/>
< property name =urlvalue =jdbc:mysql:// localhost:3306 / app/>
< property name =usernamevalue =foo/>
< property name =passwordvalue =bar/>
//其他DBCP属性在这里
< / bean>
< bean id =sessionFactoryclass =org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean>
< property name =dataSourceref =dataSource
< property name =packagesToScan>
< list>
<值> com.my.app.model< /值>
< / list>
< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< prop key =hibernate.hbm2ddl.auto> update< / prop>
< /道具>
< / property>
< / bean>
只需将 dataSource
属性添加到 AnnotationSessionFactoryBean
作为依赖关系并完成。注意你不需要 configurationClass
属性,因为它已经是基于注解的。
我不会提示建议再使用Commons-DBCP作为数据源,而不是将 HikariCP 作为更好的数据源实现。 / p>
有关集成/配置Hibernate与Spring的更多信息,我建议 rel =nofollow>本节。
I have a problem integrating Spring, Hibernate, and Apache DBCP. I have used the DBCPConnectionProvider
from here.
I have the following xml configuration for the above said.
<context:component-scan base-package="com.my.app"/>
<tx:annotation-driven/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="packagesToScan">
<list>
<value>com.my.app.model</value>
</list>
</property>
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/app</prop>
<prop key="hibernate.connection.username">foo</prop>
<prop key="hibernate.connection.password">bar</prop>
<prop key="hibernate.connection.provider_class">org.hibernate.connection.DBCPConnectionProvider</prop>
<!-- Connection pooling related properties -->
<prop key="hibernate.dbcp.initialSize">8</prop>
<prop key="hibernate.dbcp.maxActive">20</prop>
<prop key="hibernate.dbcp.maxIdle">5</prop>
<prop key="hibernate.dbcp.minIdle">0</prop>
<prop key="hibernate.dbcp.maxWait">10000</prop>
<prop key="hibernate.dbcp.minEvictableIdleTimeMillis">180000</prop>
<prop key="hibernate.dbcp.timeBetweenEvictionRunsMillis">180000</prop>
<prop key="hibernate.dbcp.testWhileIdle">true</prop>
<prop key="hibernate.dbcp.testOnReturn">true</prop>
<prop key="hibernate.dbcp.validationQuery">select 1</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
When the database schema i.e. app
is empty two tables will be created in mysql. But I am getting NullPointerException
in the getConnection() method of the DBCPConnectionProvider
that I mentioned. That means the dataSource is not instantiated. I think I have configured everything in the xml. What am I missing. How do you configure DBCP version 1.4 with Spring and Hibernate? Please provide your insights.
Here is the stack trace:
Caused by: java.lang.NullPointerException
at org.hibernate.connection.DBCPConnectionProvider.getConnection(DBCPConnectionProvider.java:209)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555)
... 82 more
Don't do it like that. Configure the datasource you want to use in Spring as well as Hibernate. Ditch the hibernate.dbcp
and hibernate.connection
properties.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/app"/>
<property name="username" value="foo"/>
<property name="password" value="bar"/>
// Other DBCP properties here
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"
<property name="packagesToScan">
<list>
<value>com.my.app.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
Just add the dataSource
property to your AnnotationSessionFactoryBean
as dependency and done. Note you don't need the configurationClass
property as it is already annotation based.
A tip I wouldn't suggest using Commons-DBCP anymore as a datasource instead take a look at HikariCP as a better datasource implementation.
For more information in integrating/configuring Hibernate with Spring I suggest this section of the Reference Guide.
这篇关于如何为连接池配置Hibernate,Spring和Apache dbcp?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!