이클립스의 콘솔창에서 mybatis의 쿼리와 실행결과를 보여주는 방법에 대해 기술한다.
-
log4jdbc-remix 의 의존을 추가한다.
-
Log4JdbcProxyDataSource 를 Bean으로 등록해 DataSourceBean에 감싸준다. << 생성자아규먼트
-
Log4JdbcProxyDataSource 의 format을 변경할 수 있는 Log4JdbcCustomFormatter 를 Bean으로 만들고 설정한다.
-
Log4JdbcProxyDataSource 에 setter 프로퍼티로 Log4JdbcCustomFormatter 의 매개값으로 준다.
-
SqlSessionFactoryBean 생성시 DataSource 를 Log4jdbcProxtyDataSource 로 준다.
-
log4j.xml 파일에 appender 및 설정을 추가한다.
까지다. 나는 javaConfig 로 Bean을 관리하는데 그나마...익숙하므로, javaConfig로 진행했다.
1.log4jdbc-remix 의 의존을 추가한다.
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
2.Log4JdbcProxyDataSource 를 Bean으로 등록해 DataSourceBean에 감싸준다.
AOP에 대해 공부했으므로, 프록시가 먼저 가로채서 작동하며 JoinPoint에 흐름을 넘긴다는 것을 안다.
@Bean(destroyMethod = "close")
public DataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1:3306/스키마명?serverTimezone=UTC&useSSL=false&characterEncoding=utf8");
ds.setUsername("spring5");
ds.setPassword("spring5");
ds.setInitialSize(2);
ds.setMaxTotal(10);
ds.setTestWhileIdle(true);
ds.setMinEvictableIdleTimeMillis(60 * 1000 * 3);
ds.setTimeBetweenEvictionRunsMillis(10 * 1000);
return ds;
}
@Bean
public Log4jdbcProxyDataSource Log4DataSource() {
Log4jdbcProxyDataSource ld = new Log4jdbcProxyDataSource(dataSource());
ld.setLogFormatter(logFomatter());
return ld;
}
프록시 객체로 dataSoruce를 감싼다고 상상하기 좋다.
3.Log4JdbcProxyDataSource 의 format을 변경할 수 있는 Log4JdbcCustomFormatter 를 Bean으로 만들고 설정 한다.
@Bean
Log4JdbcCustomFormatter logFomatter() {
Log4JdbcCustomFormatter logFomatter = new Log4JdbcCustomFormatter();
logFomatter.setLoggingType(LoggingType.MULTI_LINE);
logFomatter.setSqlPrefix("SQL : ");
return logFomatter;
}
LoggingType 의 상수와 접두사인 Prefix 를 setter 프로퍼티로 설정하고 Bean으로 등록 한다.
4.Log4JdbcProxyDataSource 에 setter 프로퍼티로 Log4JdbcCustomFormatter 를 매개값으로 준다.
@Bean
public Log4jdbcProxyDataSource Log4DataSource() {
Log4jdbcProxyDataSource ld = new Log4jdbcProxyDataSource(dataSource());
ld.setLogFormatter(logFomatter());
return ld;
}
dataSource 객체는 생성자 로 , Log4JdbcCustomFormatter 는 setter로 준다.
5.SqlSessionFactoryBean 생성시 DataSource를 Log4jdbcProxtyDataSource로 준다.
드디어 아는 객체가 나왔다. SqlSessionFactory의 구현객체인 SqlSessionFactoryBean을 만들때 주던 setter프로퍼티에
Log4jdbcProxtyDataSource 를 주면되겠다.
@Bean
public SqlSessionFactoryBean sqlSessionFactory(Log4jdbcProxyDataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatis/mybatis-config.xml"));
factoryBean.setMapperLocations(applicationContext.getResources("classpath:/mybatis/mappers/*.xml"));
return factoryBean;
}
6.Log4j.xml 파일에 appender 및 설정을 추가한다.
<appender name="console-infolog" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %5p %m%n" />
</layout>
</appender>
....
<!-- Query Loggers -->
<logger name="jdbc.sqlonly" additivity="false">
<level value="INFO"/>
<appender-ref ref="console-infolog"/>
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="debug"/>
<appender-ref ref="console"/>
</logger>
<!-- Root Logger -->
<root>
<priority value="off" />
<appender-ref ref="console" />
</root>
appender를 추가해주고, Query문에 대한 logger를 추가해준다. sqlonly 로거는 추가한 appender 인 console-infolog 를 참조하고 있는 것이 보인다. root 로거는 보기 복잡하므로 꺼주자.
쿼리문이 콘솔에 출력된다.
'MyBatis' 카테고리의 다른 글
log4jdbc-log4j2 (0) | 2020.08.02 |
---|---|
MyBatis 에서의 자동증가 (Auto-Increatement, sequence) 값 가져오기. (0) | 2020.07.21 |
log4j.xml (0) | 2020.07.18 |
Mybatis, 테이블 연동과 기본적인 DML 조작 (0) | 2020.07.18 |
4.Java 에노테이션으로 MyBatis 연동 및 테스트 (0) | 2020.07.13 |