wlzboy
2025-11-16 f67945d53b20f6a45ae50b27d74c966eb1355bb4
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
@@ -38,10 +38,21 @@
    public Object around(ProceedingJoinPoint point) throws Throwable
    {
        DataSource dataSource = getDataSource(point);
        // 记录当前数据源,用于判断是否需要恢复
        String oldDataSourceType = DynamicDataSourceContextHolder.getDataSourceType();
        boolean isNewDataSource = false;
        if (StringUtils.isNotNull(dataSource))
        {
            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
            String newDataSourceType = dataSource.value().name();
            // 只有当数据源发生变化时才设置新的数据源
            if (!newDataSourceType.equals(oldDataSourceType))
            {
                DynamicDataSourceContextHolder.setDataSourceType(newDataSourceType);
                isNewDataSource = true;
                //logger.debug("切换数据源: {} -> {}", oldDataSourceType, newDataSourceType);
            }
        }
        try
@@ -50,8 +61,21 @@
        }
        finally
        {
            // 销毁数据源 在执行方法之后
            DynamicDataSourceContextHolder.clearDataSourceType();
            // 只有当本次调用改变了数据源时,才需要恢复
            if (isNewDataSource)
            {
                // 恢复到之前的数据源
                if (StringUtils.isNotEmpty(oldDataSourceType))
                {
                    DynamicDataSourceContextHolder.setDataSourceType(oldDataSourceType);
                    //logger.debug("恢复数据源: {}", oldDataSourceType);
                }
                else
                {
                    DynamicDataSourceContextHolder.clearDataSourceType();
                    //logger.debug("清除数据源,恢复到默认数据源");
                }
            }
        }
    }