[ Blog ] SpringBoot에 log4jdbc 사용하기
sql 쿼리 실행 시 어떤 Connection Pool 을 사용하고 있는지 로깅하는 방법
- 프록시 패턴을 사용해 Connection 객체를 래핑 & 로깅 로직을 추가하기
class DataSourceRouting(writeSource: DataSource, readSource: DataSource) : AbstractRoutingDataSource() { enum class SourceType { WRITE, READ } init { val targetDataSources: MutableMap<Any, Any> = mutableMapOf( SourceType.WRITE to writeSource, SourceType.READ to readSource ) super.setTargetDataSources(targetDataSources) super.setDefaultTargetDataSource(writeSource) super.afterPropertiesSet() } override fun determineCurrentLookupKey(): Any { val sourceType = if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) SourceType.READ else SourceType.WRITE return sourceType } override fun determineTargetDataSource(): DataSource { val dataSource = super.determineTargetDataSource() logger.info("Target DataSource Type : $dataSource") return dataSource } }
위 코드는 AbstractRoutingDataSource 를 구현하는 클래스에서 로그 로직을 추가한 예시.