optimize: MybatisFlexAutoConfiguration.java

This commit is contained in:
开源海哥 2023-06-24 11:48:58 +08:00
parent a19aefc469
commit e47500779f
4 changed files with 35 additions and 17 deletions

View File

@ -34,7 +34,7 @@ public class DataSourceManager {
}
static void resetDataSource(DataSource dataSource) {
public static void decryptDataSource(DataSource dataSource) {
if (decipher == null) {
return;
}

View File

@ -51,7 +51,7 @@ public class FlexDataSource extends AbstractDataSource {
}
public void addDataSource(String dataSourceKey, DataSource dataSource) {
DataSourceManager.resetDataSource(dataSource);
DataSourceManager.decryptDataSource(dataSource);
dataSourceMap.put(dataSourceKey, dataSource);
dbTypeHashMap.put(dataSourceKey, DbTypeUtil.getDbType(dataSource));
}
@ -61,6 +61,21 @@ public class FlexDataSource extends AbstractDataSource {
dbTypeHashMap.remove(dataSourceKey);
}
public Map<String, DataSource> getDataSourceMap() {
return dataSourceMap;
}
public Map<String, DbType> getDbTypeHashMap() {
return dbTypeHashMap;
}
public String getDefaultDataSourceKey() {
return defaultDataSourceKey;
}
public DataSource getDefaultDataSource() {
return defaultDataSource;
}
public DbType getDbType(String dataSourceKey) {
return dbTypeHashMap.get(dataSourceKey);

View File

@ -16,12 +16,9 @@
package com.mybatisflex.spring.boot;
import com.mybatisflex.core.datasource.DataSourceBuilder;
import com.mybatisflex.core.datasource.DataSourceDecipher;
import com.mybatisflex.core.datasource.DataSourceManager;
import com.mybatisflex.core.datasource.FlexDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@ -41,16 +38,14 @@ import java.util.Map;
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(MybatisFlexProperties.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@AutoConfigureBefore(value = DataSourceAutoConfiguration.class, name = "com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure")
@AutoConfigureBefore(value = DataSourceAutoConfiguration.class
, name = "com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure")
public class MultiDataSourceAutoConfiguration {
private final Map<String, Map<String, String>> dataSourceProperties;
protected final DataSourceDecipher dataSourceDecipher;
public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties
, ObjectProvider<DataSourceDecipher> dataSourceDecipherProvider) {
public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties) {
dataSourceProperties = properties.getDatasource();
dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable();
}
@ -58,10 +53,6 @@ public class MultiDataSourceAutoConfiguration {
@ConditionalOnMissingBean
public DataSource dataSource() {
if (dataSourceDecipher != null) {
DataSourceManager.setDecipher(dataSourceDecipher);
}
FlexDataSource flexDataSource = null;
if (dataSourceProperties != null && !dataSourceProperties.isEmpty()) {

View File

@ -18,6 +18,7 @@ package com.mybatisflex.spring.boot;
import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.datasource.DataSourceDecipher;
import com.mybatisflex.core.datasource.DataSourceManager;
import com.mybatisflex.core.datasource.FlexDataSource;
import com.mybatisflex.core.logicdelete.LogicDeleteManager;
import com.mybatisflex.core.logicdelete.LogicDeleteProcessor;
import com.mybatisflex.core.mybatis.FlexConfiguration;
@ -70,6 +71,7 @@ import org.springframework.util.StringUtils;
import javax.sql.DataSource;
import java.beans.PropertyDescriptor;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@ -151,7 +153,7 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
this.sqlSessionFactoryBeanCustomizers = sqlSessionFactoryBeanCustomizers.getIfAvailable();
//数据密码
//数据源解密器
this.dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable();
//动态表名
@ -178,6 +180,11 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
properties.getGlobalConfig().applyTo(FlexGlobalConfig.getDefaultConfig());
}
//数据源解密器
if (dataSourceDecipher != null) {
DataSourceManager.setDecipher(dataSourceDecipher);
}
// 动态表名配置
if (dynamicTableProcessor != null) {
TableManager.setDynamicTableProcessor(dynamicTableProcessor);
@ -213,9 +220,14 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
if (dataSourceDecipher != null) {
DataSourceManager.setDecipher(dataSourceDecipher);
if (dataSource instanceof FlexDataSource && DataSourceManager.getDecipher() != null) {
Map<String, DataSource> dataSourceMap = ((FlexDataSource) dataSource).getDataSourceMap();
for (DataSource ds : dataSourceMap.values()) {
DataSourceManager.decryptDataSource(ds);
}
}
SqlSessionFactoryBean factory = new FlexSqlSessionFactoryBean();
factory.setDataSource(dataSource);
if (properties.getConfiguration() == null || properties.getConfiguration().getVfsImpl() == null) {