From cb1404bfb09958ab482dbc4a5c65d37b233c05da Mon Sep 17 00:00:00 2001 From: rootTiket Date: Tue, 29 Oct 2024 14:24:27 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20aurora=20db=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yaml | 33 ++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index fd560d01..1672f2e7 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -1,9 +1,33 @@ spring: datasource: - url: ENC(rXVivRZ2+Z7AZQnwYxYVsXbLr2e4fifb/REZbpxgSoGW2Vm6u0Gj0/VJOfO1E+emfwXeCoU9N8H0cVuqYuoEWbdPU7kekYIIUG/nL1G4RmxrUPPttsPZGM2WrYG6sWy0) - username: ENC(QTTusIQmcVUiM+fDY8kvubSWvMLTmNCa) - password: ENC(7QKbd+ZODf/6SLG+D+Q15Or6EBw55I6KKYF0UnTqie8=) - driver-class-name: com.mysql.cj.jdbc.Driver + master: + jdbc-url: ENC(TbbwHW/iKWvTDNKvD7UPzUaxK5FawIMJra0lQ6HEKLq4Ee2YYhX/H4lRkGxYfeYgbBX3v/PkUBQA4LQru2mUA9FxHc9RVRZmGrKhJ00PrMdjacYWedTb/lNZHcegR37ec2edN3hsJ9UDrRwKqIZlqH9iEzwI/00w5fASRA7Zi4JeLqBEJNgDhZpHb1vRB5sOxUfS+7n6NkJnWydN0llUSvTGna0JObbUafqEtxao/0DocHvJ9Jlr1UE/rByyc/tdvXBNOGSgxFA=) + username: ENC(Z89GsautuOl2p6BefL146A==) + password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 10 + connection-timeout: 5000 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + minimum-idle: 10 + idle-timeout: 600000 + max-lifetime: 1800000 + + slave: + jdbc-url: ENC(ycp3HMrdb+UBuUnQLOw3i6Ml2o76lsg+XUUVmRUSU5wyxD3QKr/1gRKmBXP+4fIgnmhza+MNO8Buw9YQG0ebdPYgJuOwzlxm+K+zIneeFgtkkR7dUU/UZPVQaZhilvJsTxtHrErRaZhGSn0TE9sVpFjvro60ixvmIbhhxegqlNbfyMvnohwb7ooLsbK0H4CM/k/Qw2OQurPQ7Hm99UDoVy6Ed+VQXr0oVt2eeUQGp9x3Cd10zDOuog==) + username: ENC(Z89GsautuOl2p6BefL146A==) + password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + maximum-pool-size: 10 + connection-timeout: 5000 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + minimum-idle: 10 + idle-timeout: 600000 + max-lifetime: 1800000 + jpa: show-sql: false hibernate: @@ -16,6 +40,7 @@ spring: jdbc: time_zone: Asia/Seoul open-in-view: false + security: oauth2: client: From 40be647f303fde50ccb50bed8781751737fa48e1 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Tue, 29 Oct 2024 15:00:07 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20application.yml=20=EA=B3=84=EC=B8=B5?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yaml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 1672f2e7..904ecbf3 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -1,11 +1,11 @@ spring: datasource: master: - jdbc-url: ENC(TbbwHW/iKWvTDNKvD7UPzUaxK5FawIMJra0lQ6HEKLq4Ee2YYhX/H4lRkGxYfeYgbBX3v/PkUBQA4LQru2mUA9FxHc9RVRZmGrKhJ00PrMdjacYWedTb/lNZHcegR37ec2edN3hsJ9UDrRwKqIZlqH9iEzwI/00w5fASRA7Zi4JeLqBEJNgDhZpHb1vRB5sOxUfS+7n6NkJnWydN0llUSvTGna0JObbUafqEtxao/0DocHvJ9Jlr1UE/rByyc/tdvXBNOGSgxFA=) - username: ENC(Z89GsautuOl2p6BefL146A==) - password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) - driver-class-name: com.mysql.cj.jdbc.Driver hikari: + jdbc-url: ENC(2HeMB9z5gdgdMvunGQaAJ8Zxl/B6oWTLLhH4BlyhvnpRf9UoowL3dutYW1FcDRz5vt+LU69/Dnt9T3xjJ4oWaiK5fMvbJiC2DqSMpUrYQjuZIc5aA45/IOfiUrMOlXGHjHmcbLqQPzpdfYGoSFy7fMAZEJHHEbYJzarDEF/sujk2GbCmW1JN5qPq9AXYkNOMUULDJilD2hlvoO09qMUOOyaDJiMMB8SxzZlv18gG5ts2tPQvMU8DFly60x1ay8VbhpFqiQrskFI=) + username: ENC(Z89GsautuOl2p6BefL146A==) + password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) + driver-class-name: com.mysql.cj.jdbc.Driver maximum-pool-size: 10 connection-timeout: 5000 connection-init-sql: SELECT 1 @@ -13,13 +13,12 @@ spring: minimum-idle: 10 idle-timeout: 600000 max-lifetime: 1800000 - slave: - jdbc-url: ENC(ycp3HMrdb+UBuUnQLOw3i6Ml2o76lsg+XUUVmRUSU5wyxD3QKr/1gRKmBXP+4fIgnmhza+MNO8Buw9YQG0ebdPYgJuOwzlxm+K+zIneeFgtkkR7dUU/UZPVQaZhilvJsTxtHrErRaZhGSn0TE9sVpFjvro60ixvmIbhhxegqlNbfyMvnohwb7ooLsbK0H4CM/k/Qw2OQurPQ7Hm99UDoVy6Ed+VQXr0oVt2eeUQGp9x3Cd10zDOuog==) - username: ENC(Z89GsautuOl2p6BefL146A==) - password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) - driver-class-name: com.mysql.cj.jdbc.Driver hikari: + jdbc-url: ENC(xZaFqSkKkTPP3Ph7GgmqEwoqq4lmn+Me25G2IOIVCA1M1j/6o6VJuwX+/zPx6XHQFFjqAhIuICQQPpgWS/fr2sTYWbfXveGMHDjxxOcZ67ygeAM8+Ee+Vy3LIpOm6nL2zJLwADmdq8zBKu5nQZxlKNotvbSfG4lDME+45lbU9FKX5n/0ysGkc6RIFpO8gWsdzqp3eCkd7NpZGTwXfvgwyWzwV2SCI0ROS7JiDgGd8fV08kmWK8asHg==) + username: ENC(Z89GsautuOl2p6BefL146A==) + password: ENC(4IWCgJuGPqbikO4xgN8jZRekUWDhUoyuafdh60pKN5M=) + driver-class-name: com.mysql.cj.jdbc.Driver maximum-pool-size: 10 connection-timeout: 5000 connection-init-sql: SELECT 1 From 6e28210f1ab2715ddfdcdd270517f699052df56d Mon Sep 17 00:00:00 2001 From: rootTiket Date: Tue, 29 Oct 2024 15:00:32 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20hikari=20config=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aurora/CustomRoutingDataSource.java | 12 ++++ .../config/aurora/TransactionConfig.java | 56 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java create mode 100644 src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java diff --git a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java new file mode 100644 index 00000000..5c5cd1b7 --- /dev/null +++ b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java @@ -0,0 +1,12 @@ +package site.gachontable.gachontablebe.global.config.aurora; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +public class CustomRoutingDataSource extends AbstractRoutingDataSource { + + @Override + protected Object determineCurrentLookupKey() { + return TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? "slave" : "master"; + } +} diff --git a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java new file mode 100644 index 00000000..83af8b5d --- /dev/null +++ b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java @@ -0,0 +1,56 @@ +package site.gachontable.gachontablebe.global.config.aurora; + +import com.zaxxer.hikari.HikariDataSource; +import java.util.HashMap; +import javax.sql.DataSource; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy; + +@Configuration +public class TransactionConfig { + + private static final String MASTER_DATASOURCE = "masterDataSource"; + private static final String SLAVE_DATASOURCE = "slaveDataSource"; + + @Bean(name = MASTER_DATASOURCE) + @ConfigurationProperties(prefix = "spring.datasource.master.hikari") + public HikariDataSource masterDataSource() { + return DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + } + + @Bean(name = SLAVE_DATASOURCE) + @ConfigurationProperties("spring.datasource.slave.hikari") + public HikariDataSource slaveDataSource() { + HikariDataSource dataSource = DataSourceBuilder.create() + .type(HikariDataSource.class) + .build(); + dataSource.setReadOnly(true); + return dataSource; + } + + @Bean + public CustomRoutingDataSource routingDataSource() { + CustomRoutingDataSource routingDataSource = new CustomRoutingDataSource(); + HashMap dataSources = new HashMap<>(); + dataSources.put("master", masterDataSource()); + dataSources.put("slave", slaveDataSource()); + routingDataSource.setTargetDataSources(dataSources); + routingDataSource.setDefaultTargetDataSource(masterDataSource()); + return routingDataSource; + } + + @Bean + @Primary + @DependsOn("routingDataSource") + public DataSource dataSource(CustomRoutingDataSource routingDataSource) { + return new LazyConnectionDataSourceProxy(routingDataSource); + } +} + From 3fd2dfd6e7d94f91169aa5fbb46ec921bde8c78f Mon Sep 17 00:00:00 2001 From: rootTiket Date: Tue, 29 Oct 2024 15:09:11 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EA=B0=9C=ED=96=89=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/config/aurora/CustomRoutingDataSource.java | 1 + .../gachontablebe/global/config/aurora/TransactionConfig.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java index 5c5cd1b7..df740fe6 100644 --- a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java +++ b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/CustomRoutingDataSource.java @@ -9,4 +9,5 @@ public class CustomRoutingDataSource extends AbstractRoutingDataSource { protected Object determineCurrentLookupKey() { return TransactionSynchronizationManager.isCurrentTransactionReadOnly() ? "slave" : "master"; } + } diff --git a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java index 83af8b5d..c8ecf831 100644 --- a/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java +++ b/src/main/java/site/gachontable/gachontablebe/global/config/aurora/TransactionConfig.java @@ -52,5 +52,6 @@ public CustomRoutingDataSource routingDataSource() { public DataSource dataSource(CustomRoutingDataSource routingDataSource) { return new LazyConnectionDataSourceProxy(routingDataSource); } + }