Spring Boot和Quartz的整合

来源:互联网 发布:中电经纬数据库 编辑:程序博客网 时间:2024/06/05 04:34

Spring Boot目的是零配置,为了遵从该理念,下面的代码采用的是注解方式。

1、配置quartz

import org.quartz.Trigger;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;/** * 配置quartz * @author  * */@Configurationpublic class Quartz { /**      * attention:      * Details:配置定时任务      */      @Bean(name = "jobDetail")      public MethodInvokingJobDetailFactoryBean detailFactoryBean(Schedutask task) {// ScheduleTask为需要执行的任务          MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();                  jobDetail.setConcurrent(false);// 是否并发执行         jobDetail.setName("overTimeNoticeJob");// 设置任务的名字          jobDetail.setGroup("overTimeNoticeJobGroup");// 设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用          /*          * 为需要执行的实体类对应的对象          */          jobDetail.setTargetObject(task);          /*          * 添加需要执行的方法          * 通过这几个配置,告诉JobDetailFactoryBean我们需要执行定时执行ScheduleTask类中的需要执行方法          */         jobDetail.setTargetMethod("overTimeNotice");          return jobDetail;    }          /**      * attention:      * Details:配置定时任务的触发器,也就是什么时候触发执行定时任务      */      @Bean(name = "jobTrigger")    public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {          CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();          tigger.setJobDetail(jobDetail.getObject());          tigger.setCronExpression("* 0/5 * * * ?");// 初始时的cron表达式  ,没5分钟执行一次        tigger.setName("overTimeNoticeTrigger");// trigger的name        return tigger;        }        /**      * attention:      * Details:定义quartz调度工厂      */      @Bean(name = "scheduler")      public SchedulerFactoryBean schedulerFactory(Trigger cronJobTrigger) {          SchedulerFactoryBean bean = new SchedulerFactoryBean();          // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job          bean.setOverwriteExistingJobs(true);          // 延时启动,应用启动1秒后          bean.setStartupDelay(1);          // 注册触发器          bean.setTriggers(cronJobTrigger);          return bean;      }  }

quartz的配置类里面配置了JobDetail的工厂、Trigger的工厂和scheduler的工厂,这样的方式可以解决Job中的spring的注入bean为空的情况。

2、工作类


import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.stereotype.Component;import com.bonc.micro.service.noticetemplate.NoticeTemplateService;import com.bonc.server.service.EmailService;import com.bonc.server.service.ShortMessageService;@Configuration@Component // 此注解必加@EnableScheduling // 此注解必加/** * 超时通知任务 *  * @author liyongguan * */public class Schedutask {//@Autowired可以使用spring的bean/** * 发送告警通知 */public void overTimeNotice() {//实际的业务System.out.println("OverTime start time"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));System.out.println("OverTime end time"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));}}

知识点来自于:http://blog.csdn.net/liuchuanhong1/article/details/60873295,感谢该博主

原创粉丝点击