diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java index cc6930a2..719d5590 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/datasource/FlexDataSource.java @@ -44,15 +44,30 @@ public class FlexDataSource extends AbstractDataSource { private final Map dataSourceMap = new HashMap<>(); private final Map dbTypeHashMap = new HashMap<>(); - private final DbType defaultDbType; - private final String defaultDataSourceKey; - private final DataSource defaultDataSource; + private DbType defaultDbType; + private String defaultDataSourceKey; + private DataSource defaultDataSource; public FlexDataSource(String dataSourceKey, DataSource dataSource) { this(dataSourceKey, dataSource, true); } public FlexDataSource(String dataSourceKey, DataSource dataSource, boolean needDecryptDataSource) { + setDefaultDataSourceDo(dataSourceKey, dataSource, needDecryptDataSource); + } + + /** + * 设置默认数据源(提供动态可控性) + */ + public void setDefaultDataSource(String dataSourceKey, DataSource dataSource, boolean needDecryptDataSource) { + if (defaultDataSourceKey.equals(dataSourceKey)) { + return; + } + + setDefaultDataSourceDo(dataSourceKey, dataSource, needDecryptDataSource); + } + + private void setDefaultDataSourceDo(String dataSourceKey, DataSource dataSource, boolean needDecryptDataSource) { if (needDecryptDataSource) { DataSourceManager.decryptDataSource(dataSource); } @@ -269,6 +284,4 @@ public class FlexDataSource extends AbstractDataSource { } } - - } diff --git a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/FlexRoutingDataSource.java b/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/FlexRoutingDataSource.java deleted file mode 100644 index e8cdce2b..00000000 --- a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/FlexRoutingDataSource.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.mybatisflex.solon.integration; - -import com.mybatisflex.core.datasource.FlexDataSource; -import org.noear.solon.data.datasource.RoutingDataSource; - -import javax.sql.DataSource; - -/** - * 用与 solon 的事务对接 - * - * @author noear - * @since 2.8 - */ -public class FlexRoutingDataSource extends FlexDataSource implements RoutingDataSource { - public FlexRoutingDataSource(String dataSourceKey, DataSource dataSource) { - super(dataSourceKey, dataSource); - } - - public FlexRoutingDataSource(String dataSourceKey, DataSource dataSource, boolean needDecryptDataSource) { - super(dataSourceKey, dataSource, needDecryptDataSource); - } - - @Override - public DataSource determineCurrentTarget() { - return getDataSource(); - } -} diff --git a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/MybatisAdapterFlex.java b/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/MybatisAdapterFlex.java index 22d2c1a2..b16c9b63 100644 --- a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/MybatisAdapterFlex.java +++ b/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/MybatisAdapterFlex.java @@ -64,7 +64,7 @@ public class MybatisAdapterFlex extends MybatisAdapterDefault { @Override protected DataSource getDataSource() { - return new FlexRoutingDataSource(dsWrap.name(), dsWrap.raw()); + return dsWrap.raw(); } @Override diff --git a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/XPluginImpl.java b/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/XPluginImpl.java index 2f339bde..cad444ff 100644 --- a/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/XPluginImpl.java +++ b/mybatis-flex-solon-plugin/src/main/java/com/mybatisflex/solon/integration/XPluginImpl.java @@ -21,6 +21,7 @@ import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.datasource.DataSourceKey; +import com.mybatisflex.core.datasource.FlexDataSource; import com.mybatisflex.core.mybatis.FlexConfiguration; import com.mybatisflex.core.row.RowMapperInvoker; import com.mybatisflex.solon.aot.MybatisRuntimeNativeRegistrar; @@ -90,6 +91,12 @@ public class XPluginImpl implements Plugin { boolean isInit = MybatisFlexBootstrap.getInstance().getDataSource() == null; MybatisFlexBootstrap.getInstance().addDataSource(bw.name(), bw.raw()); + if (bw.typed()) { + //控制默认数据源 + FlexDataSource flexDataSource = (FlexDataSource) MybatisFlexBootstrap.getInstance().getDataSource(); + flexDataSource.setDefaultDataSource(bw.name(), bw.raw(), true); + } + if (isInit) { initDo(context); }