这篇文章是基于前一篇(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();//还原该线程的默认数据库到主数据库
}
}