BonecP 연결 풀과 Spring의 @Transactional 구성

Bonecp라는 연결 탱크의 성능이 DBCP와 C3P0의 성능보다 좋다는 말을 듣고 나는 새로운 프로젝트를 건설하여 MySQL을 연결하는 것을 테스트했다.
25배 빠르다고 하는데 시간이 있으면 측정해 봐야겠어요.
 
1. 문제
@Transactional을 사용할 때 MySQL 드라이브에 다음과 같은 오류가 발생하는 것을 발견했습니다
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed

 
2. 해결
해결 방법은spring의 설정을 정의할 때 DataSource에 LazyConnectionDataSourceProxy를 끼워넣는 것입니다
    <context:annotation-config/>

    <context:component-scan base-package="com.xxx.xxx.xxx"/>

    <tx:annotation-driven/>


    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource">
            <bean class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
                <property name="driverClass" value="com.mysql.jdbc.Driver"/>
                <property name="jdbcUrl"
                          value="jdbc:mysql://127.0.0.1:3306/noah?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="noah"/>
                <property name="password" value="noah"/>
            </bean>
        </property>
    </bean>

BonecP 공식 주장:http://jolbox.com/configuration-springlazy.html

좋은 웹페이지 즐겨찾기