疯狂的狮子Li
2024-07-27 86acb14f0553060171a5bfaede43fde5375d8906
update anyline 8.7.2-20240726
已添加1个文件
已修改2个文件
85 ■■■■■ 文件已修改
pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -51,7 +51,7 @@
        <!-- é™åˆ¶æ¡†æž¶ä¸­çš„fastjson版本 -->
        <fastjson.version>1.2.83</fastjson.version>
        <!-- é¢å‘运行时的D-ORM依赖 -->
        <anyline.version>8.7.2-20240722</anyline.version>
        <anyline.version>8.7.2-20240726</anyline.version>
        <!--工作流配置-->
        <flowable.version>7.0.1</flowable.version>
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package org.dromara.generator.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<String, String> features = new HashMap<>();
    /**
     * æ•°æ®æºç‰¹å¾ ç”¨æ¥å®šå‡† adapter åŒ…含数据库或JDBC协议关键字<br/>
     * ä¸€èˆ¬ä¼šé€šè¿‡ äº§å“å_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<br/>
     * 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;
    }
}
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -186,7 +186,7 @@
    @Override
    public List<GenTable> selectDbTableListByNames(String[] tableNames, String dataName) {
        Set<String> tableNameSet = new HashSet<>(List.of(tableNames));
        LinkedHashMap<String, Table<?>> tablesMap = ServiceProxy.service(dataName).metadata().tables();
        LinkedHashMap<String, Table<?>> tablesMap = ServiceProxy.metadata().tables();
        if (CollUtil.isEmpty(tablesMap)) {
            return new ArrayList<>();