package kr.pe.kwonnam.replicationdatasource.routingdatasource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * {@link org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource}와 * {@link org.springframework.transaction.support.TransactionSynchronizationManager}를 통해 * Transaction의 readOnly 값에 따라 데이터 소스 분기 */ public class ReplicationRoutingDataSource extends AbstractRoutingDataSource { private Logger log = LoggerFactory.getLogger(ReplicationRoutingDataSource.class); @Override protected Object determineCurrentLookupKey() { String dataSourceType = TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? "read" : "write"; log.info("current dataSourceType : {}", dataSourceType); return dataSourceType; } }