기존
MyBatis는 기본 제공하는PooledDataSource를 사용하도록 설정됨
。전역설정 XML파일의<dataSource type="POOLED">설정 시Connection Pool을 사용하도록 지정되나, 기본 제공되는PooledDataSource로 제공.
。MyBatis는HikariCP를 기본 제공하지 않으므로, 따로 설정을 통해 제공하도록 설정해야한다.
▶MyBatis가 아닌HikariCP로Connection Pool생성하도록 교체
XML 파일정의하기
。<dataSource type="자바설정클래스명">지정 및<property name = "별칭" value="com.mysql.cj.jdbc.Driver"/>설정
▶ 이후Java의설정 파일에서type="별칭"으로 식별되어 활용됨
。type="POOLED"→type="자바설정클래스명"으로 지정되었으므로, 해당설정 클래스에서 반환하는DataSource 객체를Connection Pool로서 활용<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="exp4"> <environment id="exp4"> <transactionManager type="JDBC"/> <dataSource type="com.uos.mybatis.config.HikariCpDatasourceFactoryConfiguration"> <property name = "driver" value="com.mysql.cj.jdbc.Driver"/> <property name = "url" value="jdbc:mysql://localhost:3304/mybatis_shop"/> <property name = "username" value="root"/> <property name = "password" value="wjd747"/> </dataSource> </environment> </environments> </configuration>
JAVA에서HikariCP 설정 클래스생성하여MyBatis에서Hikari CP의Connection을 생성하도록 설정하기
。DataSourceFactory 인터페이스를 구현 및추상메서드작성
▶ 이후HikariDataSource 객체를 생성 후 반환
。Properties는환경변수에 등록된<dataSource> 태그의Java Bean으로 자동으로의존성 주입하여 참조.
。의존성 주입된Properties 객체에서전역설정파일의<property name="별칭">의별칭을 통해접속정보를 참조하면서Hikari Connection Pool( =Hikari Data Source)를 생성 후MyBatis로 반환
▶ 이후MyBatis는HikariCP에서Connection을 가져와서SqlSession생성public class HikariCpDatasourceFactoryConfiguration implements DataSourceFactory { // <DataSource> 내 <Property> 태그를 Java Bean으로서 의존성 주입 private Properties properties; @Override public void setProperties(Properties props) { this.properties = props; } @Override public DataSource getDataSource() { // 전역설정파일의 설정을 기반으로 HikariDataSource 생성 HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName(properties.getProperty("driver")); hikariConfig.setJdbcUrl(properties.getProperty("url")); hikariConfig.setUsername(properties.getProperty("username")); hikariConfig.setPassword(properties.getProperty("password")); // Hikari Connection Pool을 MyBatis로 반환 return new HikariDataSource(hikariConfig); } }