복붙노트

[SPRING] 연결 풀링을 위해 Hibernate, Spring 및 Apache dbcp를 구성하는 방법은 무엇입니까?

SPRING

연결 풀링을 위해 Hibernate, Spring 및 Apache dbcp를 구성하는 방법은 무엇입니까?

Spring, Hibernate 및 Apache DBCP를 통합하는 데 문제가 있습니다. 여기에서 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>

데이터베이스 스키마, 즉 app이 비어 있으면 mysql에 두 개의 테이블이 생성됩니다. 하지만 내가 언급 한 DBCPConnectionProvider의 getConnection () 메소드에서 NullPointerException이 발생합니다. 이는 dataSource가 인스턴스화되지 않았 음을 의미합니다. XML에서 모든 것을 구성했다고 생각합니다. 나는 무엇이 없는가. Spring과 Hibernate로 DBCP 버전 1.4를 어떻게 구성합니까? 통찰력을주십시오.

다음은 스택 추적입니다.

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

해결법

  1. ==============================

    1.그런 식으로하지 마십시오. Spring에서 사용할 데이터 소스와 Hibernate를 설정하십시오. hibernate.dbcp와 hibernate.connection 속성들을 버린다.

    그런 식으로하지 마십시오. 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에 종속성으로 추가하고 완료하십시오. 이미 annotation 기반이므로 configurationClass 속성은 필요하지 않습니다.

    더 이상 데이터 소스로 Commons-DBCP를 사용하지 말라는 팁은 HikariCP를 더 나은 데이터 소스 구현으로 살펴보십시오.

    Spring과의 Hibernate 통합 / 설정에 대한 더 자세한 정보는 Reference Guide의이 절을 참조하기 바란다.

  2. from https://stackoverflow.com/questions/27102265/how-to-configure-hibernate-spring-and-apache-dbcp-for-connection-pooling by cc-by-sa and MIT license