SpringBoot整合Quartz 注解开发

1.导入依赖

<!-- quratz调度框架-->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
</dependency>

2.注解开发

配置两个触发器 不同的cron规则执行任务  有一天执行一次的 有5分钟执行一次的

quartz相关配置类

QuartzConfig.java

package com.jjgame.tbc.business.config;

import com.jjgame.tbc.business.quartz.JobUtil;
import com.jjgame.tbc.business.quartz.JobUtil2;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Qualifier;
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;


/**
 * @program: tbc
 * @description: 定时任务相关配置类
 * @author: lzy
 * @create: 2018-07-13 16:10
 */
@Configuration
public class QuartzConfig {

    @Bean
    public JobUtil jobUtil() {
        JobUtil bean = new JobUtil();
        return bean;
    }
    @Bean
    public JobUtil2 jobUtil2() {
        JobUtil2 bean = new JobUtil2();
        return bean;
    }

    // 配置中设定了
    // ① targetMethod: 指定需要定时执行scheduleInfoAction中的simpleJobTest()方法
    // ② concurrent:对于相同的JobDetail,当指定多个Trigger时, 很可能第一个job完成之前,
    // 第二个job就开始了。指定concurrent设为false,多个job不会并发运行,第二个job将不会在第一个job完成之前开始。
    // ③ cronExpression:0/10 * * * * ?表示每10秒执行一次,具体可参考附表。
    // ④ triggers:通过再添加其他的ref元素可在list中放置多个触发器。 scheduleInfoAction中的simpleJobTest()方法
    @Bean(name = "detailFactoryBean")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(@Qualifier("jobUtil") Object jobUtil) {
        MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
        bean.setTargetObject(jobUtil);
        bean.setTargetMethod("test");
        bean.setConcurrent(false);
        return bean;
    }
    @Bean(name = "detailFactoryBean2")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean2(@Qualifier("jobUtil2") Object jobUtil2) {
        MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
        bean.setTargetObject(jobUtil2);
        bean.setTargetMethod("test");
        bean.setConcurrent(false);
        return bean;
    }

    @Bean(name = "cronTriggerBean")
    public CronTriggerFactoryBean cronTriggerBean(@Qualifier("detailFactoryBean")MethodInvokingJobDetailFactoryBean detailFactoryBean) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(detailFactoryBean.getObject());
        tigger.setCronExpression("0/5 * * * * ? ");//每5秒执行一次
        return tigger;

    }
    @Bean(name = "cronTriggerBean2")
    public CronTriggerFactoryBean cronTriggerBean2(@Qualifier("detailFactoryBean2")MethodInvokingJobDetailFactoryBean detailFactoryBean2) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(detailFactoryBean2.getObject());
        tigger.setCronExpression("* * * * * ? ");//每5秒执行一次
        return tigger;

    }

    @Bean
    public SchedulerFactoryBean schedulerFactory(Trigger[] cronTriggerBean) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        System.err.println(cronTriggerBean[0]);
        bean.setTriggers(cronTriggerBean);
        return bean;
    }
}

JobUtil.java  任务类

package com.jjgame.tbc.business.quartz;

import org.springframework.stereotype.Service;

/**
 * @program: tbc
 * @description: 定时任务 任务类
 * @author: lzy
 * @create: 2018-07-13 16:08
 */
@Service
public class JobUtil {

    public void test() {
        System.out.println("定时任务测试");
    }
}


JobUtil2.java 任务类2

package com.jjgame.tbc.business.quartz;

import org.springframework.stereotype.Service;

/**
 * @program: tbc
 * @description: 定时任务 任务类
 * @author: lzy
 * @create: 2018-07-13 16:08
 */
@Service
public class JobUtil2 {

    public void test() {
        System.out.println("定时任务测试22");
    }
}


启动结果:一个是5秒一次  一次是一秒一次





Spring自己的定时任务

package com.jjgame.tbc.business.config;

import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @program: tbc
 * @description:
 * @author: lzy
 * @create: 2018-07-13 16:54
 */
@Component
@Configurable
@EnableScheduling
public class ScheduleJobs {
    public final static long SECOND = 1 * 1000;
    FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");


    @Scheduled(cron = "0/5 * * * * ?")
    public void cronJob() {
        System.out.println("[CronJob Execute]"+fdf.format(new Date()));
    }
}


结果:


定时任务测试22
[CronJob Execute]2018-07-13 18:10:25
定时任务测试22
定时任务测试22
定时任务测试22
定时任务测试22
[CronJob Execute]2018-07-13 18:10:30
定时任务测试

具体业务自己在JobUtil中自己实现就行


xml开发:http://gong1208.iteye.com/blog/1773177

quartz学习:https://blog.csdn.net/u010648555/article/details/54863144

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值