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) { if (decipher == null) {
return; return;
} }

View File

@ -51,7 +51,7 @@ public class FlexDataSource extends AbstractDataSource {
} }
public void addDataSource(String dataSourceKey, DataSource dataSource) { public void addDataSource(String dataSourceKey, DataSource dataSource) {
DataSourceManager.resetDataSource(dataSource); DataSourceManager.decryptDataSource(dataSource);
dataSourceMap.put(dataSourceKey, dataSource); dataSourceMap.put(dataSourceKey, dataSource);
dbTypeHashMap.put(dataSourceKey, DbTypeUtil.getDbType(dataSource)); dbTypeHashMap.put(dataSourceKey, DbTypeUtil.getDbType(dataSource));
} }
@ -61,6 +61,21 @@ public class FlexDataSource extends AbstractDataSource {
dbTypeHashMap.remove(dataSourceKey); 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) { public DbType getDbType(String dataSourceKey) {
return dbTypeHashMap.get(dataSourceKey); return dbTypeHashMap.get(dataSourceKey);

View File

@ -16,12 +16,9 @@
package com.mybatisflex.spring.boot; package com.mybatisflex.spring.boot;
import com.mybatisflex.core.datasource.DataSourceBuilder; 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 com.mybatisflex.core.datasource.FlexDataSource;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@ -41,16 +38,14 @@ import java.util.Map;
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(MybatisFlexProperties.class) @EnableConfigurationProperties(MybatisFlexProperties.class)
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.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 { public class MultiDataSourceAutoConfiguration {
private final Map<String, Map<String, String>> dataSourceProperties; private final Map<String, Map<String, String>> dataSourceProperties;
protected final DataSourceDecipher dataSourceDecipher;
public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties) {
, ObjectProvider<DataSourceDecipher> dataSourceDecipherProvider) {
dataSourceProperties = properties.getDatasource(); dataSourceProperties = properties.getDatasource();
dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable();
} }
@ -58,10 +53,6 @@ public class MultiDataSourceAutoConfiguration {
@ConditionalOnMissingBean @ConditionalOnMissingBean
public DataSource dataSource() { public DataSource dataSource() {
if (dataSourceDecipher != null) {
DataSourceManager.setDecipher(dataSourceDecipher);
}
FlexDataSource flexDataSource = null; FlexDataSource flexDataSource = null;
if (dataSourceProperties != null && !dataSourceProperties.isEmpty()) { 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.FlexGlobalConfig;
import com.mybatisflex.core.datasource.DataSourceDecipher; import com.mybatisflex.core.datasource.DataSourceDecipher;
import com.mybatisflex.core.datasource.DataSourceManager; import com.mybatisflex.core.datasource.DataSourceManager;
import com.mybatisflex.core.datasource.FlexDataSource;
import com.mybatisflex.core.logicdelete.LogicDeleteManager; import com.mybatisflex.core.logicdelete.LogicDeleteManager;
import com.mybatisflex.core.logicdelete.LogicDeleteProcessor; import com.mybatisflex.core.logicdelete.LogicDeleteProcessor;
import com.mybatisflex.core.mybatis.FlexConfiguration; import com.mybatisflex.core.mybatis.FlexConfiguration;
@ -70,6 +71,7 @@ import org.springframework.util.StringUtils;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -151,7 +153,7 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable(); this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
this.sqlSessionFactoryBeanCustomizers = sqlSessionFactoryBeanCustomizers.getIfAvailable(); this.sqlSessionFactoryBeanCustomizers = sqlSessionFactoryBeanCustomizers.getIfAvailable();
//数据密码 //数据源解密器
this.dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable(); this.dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable();
//动态表名 //动态表名
@ -178,6 +180,11 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
properties.getGlobalConfig().applyTo(FlexGlobalConfig.getDefaultConfig()); properties.getGlobalConfig().applyTo(FlexGlobalConfig.getDefaultConfig());
} }
//数据源解密器
if (dataSourceDecipher != null) {
DataSourceManager.setDecipher(dataSourceDecipher);
}
// 动态表名配置 // 动态表名配置
if (dynamicTableProcessor != null) { if (dynamicTableProcessor != null) {
TableManager.setDynamicTableProcessor(dynamicTableProcessor); TableManager.setDynamicTableProcessor(dynamicTableProcessor);
@ -213,9 +220,14 @@ public class MybatisFlexAutoConfiguration implements InitializingBean {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { 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(); SqlSessionFactoryBean factory = new FlexSqlSessionFactoryBean();
factory.setDataSource(dataSource); factory.setDataSource(dataSource);
if (properties.getConfiguration() == null || properties.getConfiguration().getVfsImpl() == null) { if (properties.getConfiguration() == null || properties.getConfiguration().getVfsImpl() == null) {