博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot搭建可配置Quartz2
阅读量:2447 次
发布时间:2019-05-10

本文共 3434 字,大约阅读时间需要 11 分钟。

第一步 从配置入手

@EnableScheduling
此注解为开放执行定时任务

@Autowiredprivate ApplicationContext applicationContext;@Beanpublic SchedulerFactoryBean getSchedulerFactoryBean() {    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();    jobFactory.setApplicationContext(applicationContext);    schedulerFactoryBean.setJobFactory(jobFactory);    return schedulerFactoryBean;}
因为我是效率开发 很多我自己都是没有理解就把代码拿过来用了 这个我以后再补充吧,这个是需要配置在taskconfig中的

第二部分,自定义定时任务的核心配置类

@Autowiredprivate SchedulerFactoryBean schedulerFactoryBean;// 定义动态任务public void startAndExecuteJob(ScheduleJobEntity scheduleJob) throws SchedulerException {    Scheduler scheduler = schedulerFactoryBean.getScheduler();    ServerUpdateType type = scheduleJob.getUpdateType();    if (type == ServerUpdateType.HAND) {        // close task        TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getId().toString(), scheduleJob.getJobName());        scheduler.unscheduleJob(triggerKey);    } else {        // if express is null , them rollback;        if (StringUtil.format(scheduleJob.getCronExpress()).equals("")) {            return;        }        TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getId().toString(), scheduleJob.getJobName());        CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);        // build new cron expression        CronScheduleBuilder scheduleBuilder = null;        if (type == ServerUpdateType.DAILY) {            scheduleBuilder = CronScheduleBuilder.cronSchedule(StringUtil.format(scheduleJob.getCronExpress()));        } else {            //if the enum is not equals them rollback            return;        }        // if no task running        if (null == trigger) {            JobDetail jobDetail = JobBuilder.newJob(JobService.class)                    .withIdentity(scheduleJob.getId().toString(), scheduleJob.getJobName()).build();            jobDetail.getJobDataMap().put("scheduleJob", scheduleJob);            // build new trigger by new cron expression            trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getId().toString(), scheduleJob.getJobName())                    .withSchedule(scheduleBuilder).build();            scheduler.scheduleJob(jobDetail, trigger);        } else {            // task is running            // build new trigger by new cron expression            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)                    .withSchedule(scheduleBuilder).build();            //reset task            scheduler.rescheduleJob(triggerKey, trigger);        }    }}
因为此类需要spring来管理 所以需要加 @Service注解

需要注意的是 config配置文件中 需要扫描到此类,以便于spring来管理@ComponentScan

第三部分

我们来定义具体需要执行的service

class JobService implements org.quartz.Job
实现execute方法
@Override    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
ScheduleJobEntity scheduleJob = (ScheduleJobEntity) jobExecutionContext.getMergedJobDataMap().get("scheduleJob"); logger.info("-- start task " + scheduleJob.getJobName() + ", update type " + scheduleJob.getUpdateType().getValue() + " --"); // 具体进行的任务// service.xxx(); }

第四部分

entity的开发

由于我设计的是表之间的关联关系

任务表

核心字段 : id   jobname(任务名称)  cromExpress(定时的表达式) isOpen(开关)

其它表采用manyToOne进行关联

第五部分

引入所需jar包

org.quartz-scheduler
quartz
2.2.2

转载地址:http://ymaqb.baihongyu.com/

你可能感兴趣的文章
将ip保存在txt文档中_将任何文件存储在Google文档中
查看>>
disconf apps_Google Apps Drop IE6支持
查看>>
使用Screenr创建截屏视频
查看>>
互联网总线带宽_新技术将使互联网带宽翻倍
查看>>
java自由职业者是什么_一个成功的自由职业者需要什么?
查看>>
java语言作为入门好吗_Java作为学生的第一语言
查看>>
sql内联接外联接三张表_在SQL中联接三个或更多表
查看>>
Django博客教程–创建一个简单的博客
查看>>
编程和编码的区别_安全编程和编码提示
查看>>
实用的小应用_使您的新应用更安全的实用提示
查看>>
android mvp示例_Android深层链接示例
查看>>
Android RSS阅读器教程
查看>>
SkySilk –托管云服务提供商
查看>>
使用字典的Python HashMap实现
查看>>
wps宏的功能_宏与功能之间的区别
查看>>
while和do while循环之间的区别
查看>>
程序员连续剧_每个程序员都应该看的5部最佳电视连续剧
查看>>
tensorflow简介_TensorFlow简介
查看>>
矩阵 python 加法_Python矩阵加法
查看>>
python快速排序_Python快速排序
查看>>