mybatis 커넥션 설정
스프링 + 마이바티스 조합은 개발자를 편리해주게 한다.
ORM 프레임워크 마이바티스에서 커넥션 설정을 알아보자..
뭐 DBMS에서 튜닝도 물론 해줘야하지만, 프레임워크 장점을 이용해봅시다. ㅋ
[MyBatis singleton class]
package meeton.web.util.mybatis; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatis { private static final MyBatis self = new MyBatis(); public static MyBatis getInstance() { return self; } private SqlSessionFactory factory; private MyBatis() { reload(); } public SqlSessionFactory getFactory() { return factory; } public void reload() { try { factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml")); } catch (Exception ex) { ex.printStackTrace(); } } }
[mybatis.xml]
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "<a href="http://mybatis.org/dtd/mybatis-3-config.dtd">http://mybatis.org/dtd/mybatis-3-config.dtd</a>"> <configuration> <properties resource="config.properties"/> <environments default="default"> <environment id="default"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="poolMaximumActiveConnections" value="20"/> <property name="poolMaximumIdleConnections" value="20"/> <property name="poolMaximumCheckoutTime" value="20000"/> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="select 1"/> <property name="poolPingConnectionsNotUsedFor" value="43200"/> <property name="poolTimeToWait" value="30000"/> <property name="driver.encoding" value="UTF-8"/> </dataSource> </environment> </environments> <mappers> <mapper resource="root/sub1/sub2/sample.xml"/> </mappers> </configuration>
[sample.xml]
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "<a href="http://mybatis.org/dtd/mybatis-3-mapper.dtd">http://mybatis.org/dtd/mybatis-3-mapper.dtd</a>"> <mapper namespace="test.mysql"> <select id="selectAllUsers" resultType="Map"> select * from user </select> <select id="selectUser" parameterType="String" resultType="Map"> select * from user where user = #{user} </select> </mapper></div> <div itemprop="articleBody">
==================================================================================
여기서 눈여겨 볼 사항이 <property name=”poolPingQuery” value=”select 1″/> 이다.
기존에 validationQuery 대신 poolPingQuery로 사용 하고 있다.
다음은 각 pool 과 관련된 속성 값 설명이다.
<property name="poolMaximumActiveConnections" value="20"/> : 동시 활성화 할 커넥션 수 <property name="poolMaximumIdleConnections" value="20"/> : 유휴상태의 커넥션 수 <property name="poolMaximumCheckoutTime" value="20000"/> : 커넥션 요청 후 획득까지 기다리는 시간 <property name="poolPingEnabled" value="true"/> : 커넥션 ping 테스트 <property name="poolPingQuery" value="select 1"/> : 커넥션이 살아 있는지 확인할 쿼리 <property name="poolPingConnectionsNotUsedFor" value="43200"/> : 커넥션이 얼마 동안 유휴상태면 닫히는지 판단하는 시간 <property name="poolTimeToWait" value="30000"/> : 사용 불가능한 커넥션 기다리는 시간 <property name="poolPingConnectionsOlderThan" value="43200"/> : 어떤 커넥션이 닫힐 상태인지 판단하는 기준시간