在多数据库情景下,做定时业务时需要所有数据库都执行一遍定时业务的方案

这篇文章是基于前一篇(SASS平台根据用户机构动态切换数据库连接的datasource )将数据库按机构分库的文章的,后来由于项目本身自带一些需要后台定时执行的业务,需要每个分库都执行一遍,考虑如下方案:

//假设有该方法为定时执行方法,每小时执行,去各个分库进行业务操作

@Scheduled(cron="0 0 0/1 * * ?")

@DBAllAnno

public void xxx(){

    //执行具体业务逻辑增删改查

}

//新建切面类

public class XXAllInterceptor implements EnvironmentAware{

    private Environment env;//获取到环境配置信息

    @Around("@annotation(dBAllAnno)")

    public void doSm(ProceedingJoinPoint point,DBAllAnno dBAllAnno ){

        String dataSourceNames = environment.getProperty("xx.jdbc.datasource.names")//即application配置文件中的多数据源名称配置项,多个数据库逗号分隔

        for(String db : dataSourceNames.split(",")){//此处遍历所有数据库进行多次定时方法调用

            XXDataSourceContextHolder.setCurrentDataSourceName(db);//将当前数据源切换

            point.proceed();//调用原方法逻辑

        }

        XXDataSourceContextHolder.clearCurrentDataSourceName();//还原该线程的默认数据库到主数据库

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章