You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
외부 서비스(http, etc …)에 접근해서 작업을 수행한 이후에 그 결과값을 Database에 Read/Write하는 경우 외부 서비스에 의존하는 시간만큼 불필요한 커넥션 점유
Multi Datasource 환경에서 트랜잭션에 진입한 이후 Datasource를 결정해야할때 이미 트랜잭션 진입시점에 Datasource가 결정되므로 분기가 불가능
LazyConnectionDataSourceProxy을 사용하면 실제로 커넥션이 필요한경우가 아니라면 데이터베이스 풀에서 커넥션을 점유하지 않고 실제로 필요한 시점에만 커넥션을 점유하게 할 수 있다. 이는
트랜잭션 시작시에 Connection Proxy 객체를 리턴하고 실제로 쿼리가 발생할 때 데이터소스에서 getConnection()을 호출하는 역할을 제공한다.
주의사항
처음 spring boot 뜰때는 ddl이 생성되는 경우 TransactionSynchronizationManager.isActualTransactionActive() 가 false이기 때문에 slave쪽으로 ddl이 나가게 된다. slave는 read-only 설정을 config에 해뒀기 때문에 ddl생성에 문제가 생긴다. 이 부분은 사전에 ddl을 생성해놓으면 해결된다.
The text was updated successfully, but these errors were encountered:
datasource 이중화
구성
application.yml
ReplicationRoutingDataSource.java
트랜잭션이 활성화되어있는지와 readOnly 여부를 통해 어떤 db로 요청을 보낼지 결정하는 RoutingDataSource를 커스텀해준다.
DbConfig.java
yml에 적은 설정들을 HiKariDataSource 클래스에 매핑해서 가져와서 빈으로 등록해주고 routingDataSource의 dataSource를 하나 만들어서 엮어준다.
그리고 최종적으로 실질적으로 사용되는 datasource빈을 만들어서 등록해준다.
LazyConnectionDataSourceProxy
LazyConnectionDataSourceProxy을 사용하면 실제로 커넥션이 필요한경우가 아니라면 데이터베이스 풀에서 커넥션을 점유하지 않고 실제로 필요한 시점에만 커넥션을 점유하게 할 수 있다. 이는
트랜잭션 시작시에 Connection Proxy 객체를 리턴하고 실제로 쿼리가 발생할 때 데이터소스에서 getConnection()을 호출하는 역할을 제공한다.
주의사항
처음 spring boot 뜰때는 ddl이 생성되는 경우
TransactionSynchronizationManager.isActualTransactionActive()
가 false이기 때문에 slave쪽으로 ddl이 나가게 된다. slave는 read-only 설정을 config에 해뒀기 때문에 ddl생성에 문제가 생긴다. 이 부분은 사전에 ddl을 생성해놓으면 해결된다.The text was updated successfully, but these errors were encountered: