Spring Boot和Quartz的整合

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 
 *
 */
@Configuration
public 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,感谢该博主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值