Java 如何为连接池配置Hibernate、Spring和ApacheDBCP?

Java 如何为连接池配置Hibernate、Spring和ApacheDBCP?,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我在集成Spring、Hibernate和ApacheDBCP时遇到问题。我使用了来自的DBCPConnectionProvider 对于上述内容,我有以下xml配置 <context:component-scan base-package="com.my.app"/> <tx:annotation-driven/> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annota

我在集成Spring、Hibernate和ApacheDBCP时遇到问题。我使用了来自的DBCPConnectionProvider

对于上述内容,我有以下xml配置

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

别那样做。配置要在Spring和Hibernate中使用的数据源。放弃hibernate.dbcp和hibernate.connection属性

<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>
只需将dataSource属性作为依赖项添加到AnnotationSessionFactoryBean中即可。注意:您不需要configurationClass属性,因为它已经基于注释

我不建议再将Commons DBCP用作数据源,而是将其视为更好的数据源实现


有关集成/配置Hibernate与Spring的更多信息,我建议参考指南。

不要这样做。配置要在Spring和Hibernate中使用的数据源。放弃hibernate.dbcp和hibernate.connection属性

<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>
只需将dataSource属性作为依赖项添加到AnnotationSessionFactoryBean中即可。注意:您不需要configurationClass属性,因为它已经基于注释

我不建议再将Commons DBCP用作数据源,而是将其视为更好的数据源实现


有关将Hibernate与Spring集成/配置的更多信息,我建议参考指南。

谢谢。但是,我听说hibernate不支持BasicDataSource,也就是dbcp。因此,我们需要一个实现ConnectionProvider接口的类。我错了吗?不,你错了。您可以使用任何您喜欢的数据源。。。您不需要连接提供程序。另外,不建议使用hibernate的内部池,因为它们在自己的文档中声明了这一点。只需注入数据源,这就是您所需要的。@M.Denium好的。我试过配置。但是,当应用程序启动时,我在mysql工作台中没有看到8个连接。默认情况下,2已存在。当应用程序启动时,我期望有2+8个连接。但是数字是另外的。@M.Denium我只看到创建了5个连接。这是什么意思?这就是我使用上面提到的类的原因之一。请确保您添加了所有属性。如果您复制了上面的代码,您只能获得默认的commons dbcp设置,可能是5。谢谢。但是,我听说hibernate不支持BasicDataSource,也就是dbcp。因此,我们需要一个实现ConnectionProvider接口的类。我错了吗?不,你错了。您可以使用任何您喜欢的数据源。。。您不需要连接提供程序。另外,不建议使用hibernate的内部池,因为它们在自己的文档中声明了这一点。只需注入数据源,这就是您所需要的。@M.Denium好的。我试过配置。但是,当应用程序启动时,我在mysql工作台中没有看到8个连接。默认情况下,2已存在。当应用程序启动时,我期望有2+8个连接。但是数字是另外的。@M.Denium我只看到创建了5个连接。这是什么意思?这就是我使用上面提到的类的原因之一。如果复制上面的代码,请确保添加了所有属性。您只获得默认的commons dbcp设置,可能是5。