diff --git a/pom.xml b/pom.xml
index c82aa3b0..ed6e9597 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@
3.2.1
- 8.7.2-20240722
+ 8.7.2-20240726
7.0.1
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java
new file mode 100644
index 00000000..4ce71f6e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/config/MyBatisDataSourceMonitor.java
@@ -0,0 +1,81 @@
+package org.dromara.gen.config;
+
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import lombok.extern.slf4j.Slf4j;
+import org.anyline.data.datasource.DataSourceMonitor;
+import org.anyline.util.ConfigTable;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Component
+public class MyBatisDataSourceMonitor implements DataSourceMonitor {
+
+ public MyBatisDataSourceMonitor() {
+ // 调整执行模式为自定义
+ ConfigTable.KEEP_ADAPTER = 2;
+ }
+
+ private final Map features = new HashMap<>();
+
+ /**
+ * 数据源特征 用来定准 adapter 包含数据库或JDBC协议关键字
+ * 一般会通过 产品名_url 合成 如果返回null 上层方法会通过driver_产品名_url合成
+ *
+ * @param datasource 数据源
+ * @return String 返回null由上层自动提取
+ */
+ @Override
+ public String feature(Object datasource) {
+ String feature = null;
+ if (datasource instanceof JdbcTemplate jdbc) {
+ DataSource ds = jdbc.getDataSource();
+ if (ds instanceof DynamicRoutingDataSource) {
+ String key = DynamicDataSourceContextHolder.peek();
+ feature = features.get(key);
+ if (null == feature) {
+ Connection con = null;
+ try {
+ con = DataSourceUtils.getConnection(ds);
+ DatabaseMetaData meta = con.getMetaData();
+ String url = meta.getURL();
+ feature = meta.getDatabaseProductName().toLowerCase().replace(" ", "") + "_" + url;
+ features.put(key, feature);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ } finally {
+ if (null != con && !DataSourceUtils.isConnectionTransactional(con, ds)) {
+ DataSourceUtils.releaseConnection(con, ds);
+ }
+ }
+ }
+ }
+ }
+ return feature;
+ }
+
+ /**
+ * ConfigTable.KEEP_ADAPTER=2 : 根据当前接口判断是否保持同一个数据源绑定同一个adapter
+ * DynamicRoutingDataSource类型的返回false,因为同一个DynamicRoutingDataSource可能对应多类数据库, 如果项目中只有一种数据库 应该直接返回true
+ *
+ * @param datasource 数据源
+ * @return boolean
+ */
+ @Override
+ public boolean keepAdapter(Object datasource) {
+ if (datasource instanceof JdbcTemplate jdbc) {
+ DataSource ds = jdbc.getDataSource();
+ return !(ds instanceof DynamicRoutingDataSource);
+ }
+ return true;
+ }
+
+}