parent
92ff4df5fe
commit
3ded2cb238
@ -1,10 +0,0 @@
|
||||
package com.bsmlab.dfx.agent.config.datasource;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class DataSourcePool {
|
||||
|
||||
}
|
||||
@ -1,80 +1,32 @@
|
||||
package com.bsmlab.dfx.agent.config.datasource;
|
||||
|
||||
import com.bsmlab.dfx.agent.config.Settings;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.dbcp2.BasicDataSource;
|
||||
import org.apache.ibatis.datasource.pooled.PooledDataSource;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.DependsOn;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.TransactionManager;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
@Service
|
||||
@DependsOn({"settings", "dynamicRoutingDataSource"})
|
||||
@Component
|
||||
public class DynamicDataSourceService {
|
||||
private final Settings settings;
|
||||
private final DynamicRoutingDataSource dynamicRoutingDataSource;
|
||||
private final RefreshableSqlSessionFactoryBean refreshableSqlSessionFactoryBean;
|
||||
private final Map<String, SqlSessionFactory> sqlSessionFactoryMap = new HashMap<>();
|
||||
private final Map<String, DataSourceTransactionManager> transactionManagerMap = new HashMap<>();
|
||||
private Map<String, SqlSessionFactory> sqlSessionFactoryMap = new HashMap<>();
|
||||
private Map<String, DataSourceTransactionManager> transactionManagerMap = new HashMap<>();
|
||||
|
||||
public SqlSessionFactory getSqlSessionFactory(String dataSourceId) {
|
||||
return this.sqlSessionFactoryMap.get(dataSourceId);
|
||||
}
|
||||
|
||||
public TransactionManager getTransactionManager(String dataSourceId) {
|
||||
public DataSourceTransactionManager getTransactionManager(String dataSourceId) {
|
||||
return this.transactionManagerMap.get(dataSourceId);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
Map<String, DataSourceDto> dataSourceDtoMap = settings.getDataSourceDtoMap();
|
||||
for(String dataSourceId : dataSourceDtoMap.keySet()) {
|
||||
DataSourceDto dataSourceDto = dataSourceDtoMap.get(dataSourceId);
|
||||
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);
|
||||
dynamicRoutingDataSource.addDataSource(dataSourceId, dataSource);
|
||||
refreshableSqlSessionFactoryBean.setDataSource(dataSource);
|
||||
sqlSessionFactoryMap.put(dataSourceId, refreshableSqlSessionFactoryBean.getObject());
|
||||
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
|
||||
transactionManagerMap.put(dataSourceId, transactionManager);
|
||||
public void setSqlSessionFactoryMap(Map<String, SqlSessionFactory> sqlSessionFactoryMap) {
|
||||
this.sqlSessionFactoryMap = sqlSessionFactoryMap;
|
||||
}
|
||||
|
||||
public void setTransactionManagerMap(Map<String, DataSourceTransactionManager> transactionManagerMap) {
|
||||
this.transactionManagerMap = transactionManagerMap;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in new issue