代码拉取完成,页面将自动刷新
使用springboot整合mybatisplus的动态数据源切换,以及对定时任务框架quartz的整合案例,可以运行后添加新的数据源
软件架构说明 1.动态数据源配置
spring:
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
url: jdbc:mysql://localhost:3306/dynamic-datasource?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
2.DynamicDataSource 动态数据源切换主要类
@Configuration
@RequiredArgsConstructor
public class DynamicDataSource extends DynamicRoutingDataSource {
private final DefaultDataSourceCreator defaultDataSourceCreator;
public DataSource determineDataSource() {
//获取当前的数据源key 为null默认走master
String dsKey = DynamicDataSourceContextHolder.peek();
Map<String, DataSource> dataSources = this.getDataSources();
if (StringUtils.hasText(dsKey) && !dataSources.containsKey(dsKey)){
throw new BusinessException("501","不存在的数据源信息!");
}
return this.getDataSource(dsKey);
}
@Override
public Map<String, DataSource> getDataSources() {
return super.getDataSources();
}
public void setDataSources(DataSourceProperty dataSourceProperty){
//创建新的数据源
DataSource dataSource = defaultDataSourceCreator.createDataSource(dataSourceProperty);
//获取本地数据源
Map<String, DataSource> dataSources = this.getDataSources();
//把添加的数据源存入本地
dataSources.put(dataSourceProperty.getPoolName(),dataSource);
}
}
3.定时任务执行工具类QuartzUtils
public class QuartzUtils {
/**
* 创建定时任务 定时任务创建之后默认启动状态
*
* @param scheduler 调度器
*/
public static void createScheduleJob(Scheduler scheduler,String cron,String key,String desc) {
try {
// 构建定时任务信息 使用id作为任务唯一值,在执行时可以拿到。
JobDetail jobDetail = JobBuilder.newJob(DynamicTask.class).withIdentity(key).withDescription(desc).build();
// 设置定时任务执行方式
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
// 构建触发器trigger
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(key).withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
throw new BusinessException("502","创建定时任务失败");
}
}
/**
* 根据任务Id暂停定时任务
*
* @param scheduler 调度器
* @param jobId 定时任务名称
*/
public static void pauseScheduleJob(Scheduler scheduler, String jobId) {
JobKey jobKey = JobKey.jobKey(jobId);
try {
scheduler.pauseJob(jobKey);
} catch (SchedulerException e) {
throw new BusinessException("503","暂停定时任务出错");
}
}
/**
* 根据任务Id恢复定时任务
*
* @param scheduler 调度器
* @param jobId 定时任务id
*/
public static void resumeScheduleJob(Scheduler scheduler, String jobId) {
JobKey jobKey = JobKey.jobKey(jobId);
try {
scheduler.resumeJob(jobKey);
} catch (SchedulerException e) {
throw new BusinessException("504","启动定时任务出错");
}
}
/**
* 根据任务id立即运行一次定时任务
*
* @param scheduler 调度器
* @param jobId 定时任务id
*/
public static void runOnce(Scheduler scheduler, String jobId) {
JobKey jobKey = JobKey.jobKey(jobId);
try {
scheduler.triggerJob(jobKey);
} catch (SchedulerException e) {
throw new BusinessException("504","运行定时任务出错");
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。