사용자 도구

사이트 도구


java:jdbc:replication

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:jdbc:replication [2014/12/25 21:57]
kwon37xi
java:jdbc:replication [2023/02/16 13:51] (현재)
kwon37xi [Java JDBC Replication Connection Pool (DataSource)]
줄 1: 줄 1:
-====== Java JDBC Replication Connection Pool(DataSource) ======+====== Java JDBC Replication Connection Pool (DataSource) ======
 Master/Slave (Write/Read) replication connection pool 구현 방법. Master/Slave (Write/Read) replication connection pool 구현 방법.
  
-===== Springframework =====+  * [[https://github.com/kwon37xi/replication-datasource|replication-datasource]] 프로젝트 참조. 
 +  * [[java:jdbc:shardingsphere|Apache Sharding Sphere]] 
 + 
 +===== Springframework Transaction 사용시 =====
 Spring 프레임워크를 사용할 경우에는 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.html|AbstractRoutingDataSource]]와 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.html|LazyConnectionDataSourceProxy]]를 조합하면 ''@Transactional(readOnly=true|false)''로 Master/Slave 커넥션을 선언적으로 조정 가능하다. Spring 프레임워크를 사용할 경우에는 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/lookup/AbstractRoutingDataSource.html|AbstractRoutingDataSource]]와 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/datasource/LazyConnectionDataSourceProxy.html|LazyConnectionDataSourceProxy]]를 조합하면 ''@Transactional(readOnly=true|false)''로 Master/Slave 커넥션을 선언적으로 조정 가능하다.
 +
 +이 방식은 Spring Framework의 Transaction과 함께 사용할 때만 작동한다.
  
 최종적으로 ''LazyConnectionDataSourceProxy''로 감싸야 하는 이유는 Spring이 Transaction을 시작할 때 트랜잭션 정보를 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html|TransactionSynchronizationManager]]와 동기화 하기 전에 먼저 데이터소스에서 커넥션을 맺어버리기 때문이다. 최종적으로 ''LazyConnectionDataSourceProxy''로 감싸야 하는 이유는 Spring이 Transaction을 시작할 때 트랜잭션 정보를 [[http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationManager.html|TransactionSynchronizationManager]]와 동기화 하기 전에 먼저 데이터소스에서 커넥션을 맺어버리기 때문이다.
줄 27: 줄 32:
 ReplicationRoutingDataSource rrds = new ReplicationRoutingDataSource(); ReplicationRoutingDataSource rrds = new ReplicationRoutingDataSource();
  
-Map<Object, Object> targetDataSources = new HashMap<>();+Map<Object, Object> targetDataSources = new HashMap<Object,Object>();
 targetDataSources.put("master", masterDataSource); targetDataSources.put("master", masterDataSource);
 targetDataSources.put("slave", slaveDataSource); targetDataSources.put("slave", slaveDataSource);
java/jdbc/replication.1419512275.txt.gz · 마지막으로 수정됨: 2014/12/25 21:57 저자 kwon37xi