문서의 이전 판입니다!
Master/Slave (Write/Read) replication connection pool 구현 방법.
Spring 프레임워크를 사용할 경우에는 AbstractRoutingDataSource와 LazyConnectionDataSourceProxy를 조합하면 @Transactional(readOnly=true|false)
로 Master/Slave 커넥션을 선언적으로 조정 가능하다.
import org.springframework.transaction.support.TransactionSynchronizationManager; public class ReplicationRoutingDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? "slave" : "master"; } } DataSource masterDataSource = ...; DataSource slaveDataSource = ...; // @Bean으로 생성 ReplicationRoutingDataSource rrds = new ReplicationRoutingDataSource(); Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("master", masterDataSource); targetDataSources.put("slave", slaveDataSource); rrds.setTargetDataSources(targetDataSources); rrds.setDefaultTargetDataSource(masterDataSource); // 최종 실 사용 DataSource는 LazyConnectionDataSourceProxy 로 감싸야한다. DataSource dataSource = new LazyConnectionDataSourceProxy(rrds);