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