(文末有做好的完整项目)↓↓↓
做springboot项目时遇到的需求是:
提供给用户前端接口
让用户自由地赋予一些需要定时执行任务的触发时间
并且能够修改触发时间。
传统的@scheduler注解只能在开发时写死触发时间,无法动态修改。所以尝试了新的更灵活的quartz定时,实现需求。
在文末的完整项目中,只需要按照com.jjy.quartzjar.job.impl.MyJob类作为模板,即可在没有quartz开发经验的前提下,也可以定制出需要的定时任务。步骤分别是:
-
在
com.jjy.quartzjar.job.impl文件夹下创建自己的定时任务类

-
该类实现
com.jjy.quartzjar.job.JobExecutor接口 -
实现
com.jjy.quartzjar.job.impl接口的execute方法 -
在该方法中实现编写定时任务的代码
//2,3,4步骤代码示例
public class MyJob implements JobExecutor{
/**
* @Author JiaYun
* @Description 每个定时任务只有一个执行方法
* @param context
* @Return void
* @Date 2021/8/12 15:27
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("MyJob executing at "+new Date());
}
}
- 启动项目后,通过http://localhost:8080/swagger-ui/index.html#/job-controller/saveUsingPOST 接口提交cronExpression,即可动态修改任务触发时间

关键代码如下:
- Scheduler配置类
@Configuration
public class SchedulerConfig {
@Autowired
private DataSource dataSource;
//DirectScheduleFactory:在代码定制schedule参数
@Bean
public Scheduler scheduler() throws IOException {
return factoryBean().getScheduler();
}
@Bean
public SchedulerFactoryBean factoryBean() throws IOException {
SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
factoryBean.setSchedulerName("cluster_schedule");
factoryBean.setDataSource(dataSource);
//可有可无
//factoryBean.setApplicationContextSchedulerContextKey("application");
factoryBean.setQuartzProperties(quartzProperties());
factoryBean.setTaskExecutor(schedulerThreadPool());
factoryBean.setStartupDelay(10);
return factoryBean;
}
@Bean
public Properties quartzProperties() throws IOException {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("quartz.properties"));
//afterPropertiesSet()是spring中的方法
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
}
@Bean
public Executor schedulerThreadPool(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//核心线程数,设为cpu核心数
executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());
executor

本文介绍了如何使用SpringBoot结合Quartz和MySQL实现动态定时任务,允许用户通过前端接口自由设定和修改任务触发时间。通过提供一个完整的项目示例,详细讲解了创建自定义定时任务类、实现接口、编写定时任务代码以及如何通过HTTP接口动态调整cron表达式来改变触发时间。
最低0.47元/天 解锁文章
859

被折叠的 条评论
为什么被折叠?



