From 732f655d15cb0442e04315dc959d9889e2643e6c Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Tue, 13 May 2025 20:17:08 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=EC=8B=9C=20=EC=84=A4=EC=A0=95=EB=90=9C=20=EA=B1=B4?= =?UTF-8?q?=EC=88=98=20=EC=9D=B4=EC=83=81=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?1000=EA=B1=B4=EC=94=A9=20=EB=82=98=EB=88=A0=EC=84=9C=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?-=20bsm-lab/dfxagent#7=20alive=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=ED=99=95=EC=9D=B8=ED=95=98=EC=97=AC?= =?UTF-8?q?=EC=95=BC=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dfxagent-bd-test-cubrid-local.json | 3 +- .../dfx/agent/config/AgentConfigDto.java | 1 + .../config/datasource/SqlExecuteService.java | 52 +++++++++++++++++++ .../task/dropbox/DropBoxSchedulerService.java | 7 +-- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json index 26c41fc..8343efa 100644 --- a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json +++ b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json @@ -19,7 +19,8 @@ "driverClassName": "cubrid.jdbc.driver.CUBRIDDriver", "url": "jdbc:cubrid:14.63.185.105:33000:amif:ami::", "username": "ami", - "password": "fox12#$%" + "password": "fox12#$%", + "maximumRowForTransaction": 1000 } ], "sqlMapperLocations": [ diff --git a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java index 36f9be9..8be60cc 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java @@ -40,6 +40,7 @@ public class AgentConfigDto { private String url; private String username; private String password; + private int maximumRowForTransaction; } @Data diff --git a/src/main/java/com/bsmlab/dfx/agent/config/datasource/SqlExecuteService.java b/src/main/java/com/bsmlab/dfx/agent/config/datasource/SqlExecuteService.java index abfc71a..c84873c 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/datasource/SqlExecuteService.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/datasource/SqlExecuteService.java @@ -1,11 +1,19 @@ package com.bsmlab.dfx.agent.config.datasource; +import com.bsmlab.dfx.agent.config.AgentConfigDto; +import com.bsmlab.dfx.agent.config.AgentConfigReader; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Service; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -13,6 +21,7 @@ import java.util.Map; @Service @Slf4j public class SqlExecuteService { + private final AgentConfigReader agentConfigReader; private final DynamicRoutingDataSource dynamicRoutingDataSource; private final DynamicDataSourceService dynamicDataSourceService; @@ -37,6 +46,49 @@ public class SqlExecuteService { } } + public List> insert(String dataSourceId, String sqlId, List> parameterList) { + List> resultParameterList = new ArrayList<>(); + dynamicRoutingDataSource.setDataSource(dataSourceId); + List dataSourceConfigList = agentConfigReader.getAgentConfigDto().getDataSourceConfig(); + AgentConfigDto.DataSourceConfig dataSourceConfig = null; + for(AgentConfigDto.DataSourceConfig config : dataSourceConfigList) { + if(dataSourceId.equals(config.getDataSourceId())) { + dataSourceConfig = config; + } + } + int maximumRowForTransaction = dataSourceConfig == null ? 1000 : dataSourceConfig.getMaximumRowForTransaction(); + if(parameterList.size() > maximumRowForTransaction) { + try(SqlSession sqlSession = dynamicDataSourceService.getSqlSessionFactory(dataSourceId).openSession()) { + for(int i = 0; i < parameterList.size(); i++) { + Map parameter = parameterList.get(i); + sqlSession.insert(sqlId, parameter); + resultParameterList.add(parameter); + } + return resultParameterList; + } + finally { + dynamicRoutingDataSource.clearDataSource(); + } + } + else { + DataSourceTransactionManager transactionManager = dynamicDataSourceService.getTransactionManager(dataSourceId); + DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED); + TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition); + try(SqlSession sqlSession = dynamicDataSourceService.getSqlSessionFactory(dataSourceId).openSession()) { + for(int i = 0; i < parameterList.size(); i++) { + Map parameter = parameterList.get(i); + sqlSession.insert(sqlId, parameter); + resultParameterList.add(parameter); + } + transactionManager.commit(transactionStatus); + return resultParameterList; + } + finally { + dynamicRoutingDataSource.clearDataSource(); + } + } + } + public int update(String dataSourceId, String sqlId, Map parameter) { dynamicRoutingDataSource.setDataSource(dataSourceId); try(SqlSession sqlSession = dynamicDataSourceService.getSqlSessionFactory(dataSourceId).openSession()) { diff --git a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java index 2a4745e..572b6d3 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxSchedulerService.java @@ -58,9 +58,10 @@ public class DropBoxSchedulerService { ObjectMapper objectMapper = new ObjectMapper(); List> dataMapList; dataMapList = (List>) objectMapper.readValue(receiveMessageDto.getData(), List.class); - for(Map dataMap : dataMapList) { - sqlExecuteService.insert(dropBox.getDataSourceId(), dropBox.getSqlId(), dataMap); - } + sqlExecuteService.insert(dropBox.getDataSourceId(), dropBox.getSqlId(), dataMapList); +// for(Map dataMap : dataMapList) { +// sqlExecuteService.insert(dropBox.getDataSourceId(), dropBox.getSqlId(), dataMap); +// } } else if(dropBox.getTaskType() == AgentConfigDto.TaskType.RECEIVE_FILE) { // 1.2 파일 수신 메시지 처리