fix: 修复多数据源、且数据源加密的情况下,无法正确解析 jdbcUrl 的问题

This commit is contained in:
开源海哥 2023-07-30 13:07:57 +08:00
parent 413ea0469c
commit 321593524a

View File

@ -16,11 +16,14 @@
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 com.mybatisflex.spring.datasource.DataSourceAdvice; import com.mybatisflex.spring.datasource.DataSourceAdvice;
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.aop.Advisor; import org.springframework.aop.Advisor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
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;
@ -37,6 +40,7 @@ import java.util.Map;
/** /**
* MyBatis-Flex 多数据源的配置支持 * MyBatis-Flex 多数据源的配置支持
*
* @author michael * @author michael
*/ */
@ConditionalOnMybatisFlexDatasource() @ConditionalOnMybatisFlexDatasource()
@ -47,10 +51,18 @@ import java.util.Map;
, name = "com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure") , 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;
public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties) { //数据源解密器
protected final DataSourceDecipher dataSourceDecipher;
public MultiDataSourceAutoConfiguration(MybatisFlexProperties properties
, ObjectProvider<DataSourceDecipher> dataSourceDecipherProvider
) {
dataSourceProperties = properties.getDatasource(); dataSourceProperties = properties.getDatasource();
dataSourceDecipher = dataSourceDecipherProvider.getIfAvailable();
} }
@Bean @Bean
@ -60,6 +72,9 @@ public class MultiDataSourceAutoConfiguration {
FlexDataSource flexDataSource = null; FlexDataSource flexDataSource = null;
if (dataSourceProperties != null && !dataSourceProperties.isEmpty()) { if (dataSourceProperties != null && !dataSourceProperties.isEmpty()) {
DataSourceManager.setDecipher(dataSourceDecipher);
for (Map.Entry<String, Map<String, String>> entry : dataSourceProperties.entrySet()) { for (Map.Entry<String, Map<String, String>> entry : dataSourceProperties.entrySet()) {
DataSource dataSource = new DataSourceBuilder(entry.getValue()).build(); DataSource dataSource = new DataSourceBuilder(entry.getValue()).build();
if (flexDataSource == null) { if (flexDataSource == null) {