在多數據庫情景下,做定時業務時需要所有數據庫都執行一遍定時業務的方案

這篇文章是基於前一篇(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();//還原該線程的默認數據庫到主數據庫

    }

}

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