|
|
|
@ -1,6 +1,5 @@
|
|
|
|
package com.bsmlab.dfx.agent.config;
|
|
|
|
package com.bsmlab.dfx.agent.config;
|
|
|
|
|
|
|
|
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DataSourceDto;
|
|
|
|
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService;
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService;
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicRoutingDataSource;
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicRoutingDataSource;
|
|
|
|
import io.micrometer.common.util.StringUtils;
|
|
|
|
import io.micrometer.common.util.StringUtils;
|
|
|
|
@ -31,6 +30,7 @@ import java.nio.file.Files;
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
import java.nio.file.StandardCopyOption;
|
|
|
|
import java.nio.file.StandardCopyOption;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.concurrent.Executor;
|
|
|
|
import java.util.concurrent.Executor;
|
|
|
|
|
|
|
|
|
|
|
|
@ -58,8 +58,8 @@ public class DfxAgentConfiguration {
|
|
|
|
private Map<String, SqlSessionFactory> temporarySqlSessionFactoryMap = new HashMap<>();
|
|
|
|
private Map<String, SqlSessionFactory> temporarySqlSessionFactoryMap = new HashMap<>();
|
|
|
|
Map<String, DataSourceTransactionManager> temporaryTransactionManagerMap = new HashMap<>();
|
|
|
|
Map<String, DataSourceTransactionManager> temporaryTransactionManagerMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
@Bean("settings")
|
|
|
|
@Bean(name = "agentConfigReader")
|
|
|
|
public Settings loadSettings() {
|
|
|
|
public AgentConfigReader agentConfigReader() {
|
|
|
|
if(StringUtils.isBlank(this.embeddedDbFileDirectory)) {
|
|
|
|
if(StringUtils.isBlank(this.embeddedDbFileDirectory)) {
|
|
|
|
log.error("cannot found a embedded DB file. {}", this.embeddedDbFileDirectory);
|
|
|
|
log.error("cannot found a embedded DB file. {}", this.embeddedDbFileDirectory);
|
|
|
|
log.error("exit application");
|
|
|
|
log.error("exit application");
|
|
|
|
@ -70,65 +70,70 @@ public class DfxAgentConfiguration {
|
|
|
|
log.error("exit application");
|
|
|
|
log.error("exit application");
|
|
|
|
System.exit(0);
|
|
|
|
System.exit(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Settings settings = new Settings();
|
|
|
|
AgentConfigReader agentConfigReader = new AgentConfigReader();
|
|
|
|
settings.loadSettingFile(this.settingFile);
|
|
|
|
agentConfigReader.loadConfigFile(this.settingFile);
|
|
|
|
return settings;
|
|
|
|
return agentConfigReader;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Bean(name = "dynamicRoutingDataSource")
|
|
|
|
@Bean(name = "dynamicRoutingDataSource")
|
|
|
|
public DynamicRoutingDataSource dynamicRoutingDataSource(Settings settings) {
|
|
|
|
public DynamicRoutingDataSource dynamicRoutingDataSource(AgentConfigReader agentConfigReader) {
|
|
|
|
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
|
|
|
|
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
|
|
|
|
Map<String, SqlSessionFactory> sqlSessionFactoryMap = new HashMap<>();
|
|
|
|
Map<String, SqlSessionFactory> sqlSessionFactoryMap = new HashMap<>();
|
|
|
|
Map<String, DataSourceTransactionManager> transactionManagerMap = new HashMap<>();
|
|
|
|
Map<String, DataSourceTransactionManager> transactionManagerMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, DataSourceDto> dataSourceDtoMap = settings.getDataSourceDtoMap();
|
|
|
|
List<AgentConfigDto.DataSourceConfig> dataSourceConfigList = agentConfigReader.getAgentConfigDto().getDatasourceConfig();
|
|
|
|
for(String dataSourceId : dataSourceDtoMap.keySet()) {
|
|
|
|
for(AgentConfigDto.DataSourceConfig dataSourceConfig : dataSourceConfigList) {
|
|
|
|
DataSourceDto dataSourceDto = dataSourceDtoMap.get(dataSourceId);
|
|
|
|
BasicDataSource dataSource = createBasicDataSource(dataSourceConfig);
|
|
|
|
BasicDataSource dataSource = new BasicDataSource();
|
|
|
|
|
|
|
|
dataSource.setDriverClassName(dataSourceDto.getDriverClassName());
|
|
|
|
|
|
|
|
dataSource.setUrl(dataSourceDto.getUrl());
|
|
|
|
|
|
|
|
dataSource.setUsername(dataSourceDto.getUsername());
|
|
|
|
|
|
|
|
dataSource.setPassword(dataSourceDto.getPassword());
|
|
|
|
|
|
|
|
if(oracle.jdbc.driver.OracleDriver.class.getCanonicalName().equals(dataSourceDto.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(org.postgresql.Driver.class.getCanonicalName().equals(dataSourceDto.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(com.mysql.jdbc.Driver.class.getCanonicalName().equals(dataSourceDto.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(org.mariadb.jdbc.Driver.class.getCanonicalName().equals(dataSourceDto.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(com.ibm.db2.jcc.DB2Driver.class.getCanonicalName().equals(dataSourceDto.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1 FROM SYSIBM.SYSDUMMY1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
dataSource.setTestOnBorrow(false);
|
|
|
|
|
|
|
|
dataSource.setTestOnReturn(false);
|
|
|
|
|
|
|
|
dataSource.setTestOnCreate(true);
|
|
|
|
|
|
|
|
dataSource.setTestWhileIdle(true);
|
|
|
|
|
|
|
|
dataSource.setInitialSize(3);
|
|
|
|
|
|
|
|
dataSource.setMinIdle(3);
|
|
|
|
|
|
|
|
dataSource.setMaxIdle(30);
|
|
|
|
|
|
|
|
dataSource.setMaxTotal(30);
|
|
|
|
|
|
|
|
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
|
|
|
|
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
|
|
|
|
sqlSessionFactoryBean.setDataSource(dataSource);
|
|
|
|
sqlSessionFactoryBean.setDataSource(dataSource);
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
sqlSessionFactoryMap.put(dataSourceId, sqlSessionFactoryBean.getObject());
|
|
|
|
sqlSessionFactoryMap.put(dataSourceConfig.getDataSourceId(), sqlSessionFactoryBean.getObject());
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("DynamicRoutingDataSource 생성 중 오류: {}", e.getMessage(), e);
|
|
|
|
log.error("DynamicRoutingDataSource 생성 중 오류: {}", e.getMessage(), e);
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
|
|
|
|
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
|
|
|
|
transactionManagerMap.put(dataSourceId, transactionManager);
|
|
|
|
transactionManagerMap.put(dataSourceConfig.getDataSourceId(), transactionManager);
|
|
|
|
dynamicRoutingDataSource.addDataSource(dataSourceId, dataSource);
|
|
|
|
dynamicRoutingDataSource.addDataSource(dataSourceConfig.getDataSourceId(), dataSource);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.temporarySqlSessionFactoryMap = sqlSessionFactoryMap;
|
|
|
|
this.temporarySqlSessionFactoryMap = sqlSessionFactoryMap;
|
|
|
|
this.temporaryTransactionManagerMap = transactionManagerMap;
|
|
|
|
this.temporaryTransactionManagerMap = transactionManagerMap;
|
|
|
|
return dynamicRoutingDataSource;
|
|
|
|
return dynamicRoutingDataSource;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static BasicDataSource createBasicDataSource(AgentConfigDto.DataSourceConfig dataSourceConfig) {
|
|
|
|
|
|
|
|
BasicDataSource dataSource = new BasicDataSource();
|
|
|
|
|
|
|
|
dataSource.setDriverClassName(dataSourceConfig.getDriverClassName());
|
|
|
|
|
|
|
|
dataSource.setUrl(dataSourceConfig.getUrl());
|
|
|
|
|
|
|
|
dataSource.setUsername(dataSourceConfig.getUsername());
|
|
|
|
|
|
|
|
dataSource.setPassword(dataSourceConfig.getPassword());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(oracle.jdbc.driver.OracleDriver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1 FROM DUAL");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(org.postgresql.Driver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(com.mysql.jdbc.Driver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(org.mariadb.jdbc.Driver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(com.ibm.db2.jcc.DB2Driver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
|
|
|
|
|
|
|
|
dataSource.setValidationQuery("SELECT 1 FROM SYSIBM.SYSDUMMY1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
dataSource.setTestOnBorrow(false);
|
|
|
|
|
|
|
|
dataSource.setTestOnReturn(false);
|
|
|
|
|
|
|
|
dataSource.setTestOnCreate(true);
|
|
|
|
|
|
|
|
dataSource.setTestWhileIdle(true);
|
|
|
|
|
|
|
|
dataSource.setInitialSize(3);
|
|
|
|
|
|
|
|
dataSource.setMinIdle(3);
|
|
|
|
|
|
|
|
dataSource.setMaxIdle(30);
|
|
|
|
|
|
|
|
dataSource.setMaxTotal(30);
|
|
|
|
|
|
|
|
return dataSource;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Bean(name = "dynamicDataSourceService")
|
|
|
|
@Bean(name = "dynamicDataSourceService")
|
|
|
|
public DynamicDataSourceService dynamicDataSourceService() {
|
|
|
|
public DynamicDataSourceService dynamicDataSourceService() {
|
|
|
|
DynamicDataSourceService dynamicDataSourceService = new DynamicDataSourceService();
|
|
|
|
DynamicDataSourceService dynamicDataSourceService = new DynamicDataSourceService();
|
|
|
|
|