spring boot2.X版本集成quartz并实现@Autowired自动注入

近期工作需求实现用到了quartz框架,特地针对此框架进行了一些研究:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.2。
先介绍几个概念:
1、Job 表示一个工作,要执行的具体内容。
2、JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
3、Trigger 代表一个调度参数的配置,什么时候去调。
4、Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。
简单集成的话很简单,但是要实现@Autowired的话需要把quartz的类都交由spring管理,因为quartz是有自己的context的,好了,直接上集成代码了:
1、首先引入jar包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.2</version>
        </dependency>

2、定义Quartz管理类

import org.apache.commons.collections.CollectionUtils;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @Author:
 * @Description:
 * @Date:Created in 20:22 2020/11/14
 * @Modify by:
 */
@Component
public class QuartzManager {

    private static Logger logger = LoggerFactory.getLogger(QuartzManager.class);


    @Autowired
    private Scheduler scheduler;


    /**
     * 新添加一个调度作业
     *
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * @param jobClazz
     * @param cron
     * @param dataMap
     * @return
     * @throws SchedulerException
     */
    public boolean addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName,
                          Class<? extends Job> jobClazz, String cron, JobDataMap dataMap) throws SchedulerException {

        logger.info("添加一个job,设备编号为{}", jobName);
        JobKey jobKey = new JobKey(jobName, jobGroupName);
        boolean flag = isExistJob(jobKey);
        if (flag) {
            logger.error("已存在该任务,jobName:" + jobName + " jobGroupName:" + jobGroupName);
            return false;
        }

        boolean checkResult = isValidExpression(cron);
        if (!checkResult) {
            logger.error("非法的cron表达式,cron:" + cron);
        }


        JobDetail jobDetail = JobBuilder.newJob(jobClazz).withIdentity(jobKey).usingJobData(dataMap).build();
        TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroupName);
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey)
                .withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
        CronTriggerImpl cronTrigger = (CronTriggerImpl) trigger;
        cronTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
        scheduler.scheduleJob(jobDetail, cronTrigger);
        scheduler.start();
        return true;
    }


    /**
     * 检查一个job是否存在
     *
     * @param jobKey jobKey
     * @return true存在,false不存在
     * @throws SchedulerException
     */
    public boolean isExistJob(JobKey jobKey) throws SchedulerException {
        return CollectionUtils.isNotEmpty(scheduler.getTriggersOfJob(jobKey));
    }

    /**
     * 是否存在job
     *
     * @param jobName      jobName
     * @param jobGroupName jobGroupName
     * @return
     * @throws SchedulerException
     */
    public boolean isExistJob(String jobName, String jobGroupName) throws SchedulerException {
        return isExistJob(new JobKey(jobName, jobGroupName));
    }

    /**
     * 判断是否是正确的cron quarz 表达式
     *
     * @param cronExpression cron表达式
     * @return boolean
     */
    public boolean isValidExpression(String cronExpression) {
        return cronExpression != null && CronExpression.isValidExpression(cronExpression);
    }


    /**
     * 更改一个job的调度时间
     *
     * @param triggerName
     * @param triggerGroupName
     * @param cron
     * @return
     * @throws SchedulerException
     */
    public boolean modifyJobTriggerTime(String triggerName, String triggerGroupName, String cron) throws SchedulerException {

        boolean flag = isValidExpression(cron);
        if (flag) {
            logger.error("不是一个正确的cron表达式");
            return false;
        }

        Set<TriggerKey> triggerKeys = scheduler.getTriggerKeys(GroupMatcher.triggerGroupStartsWith(triggerGroupName));
        if (CollectionUtils.isEmpty(triggerKeys)) {
            logger.error("找不到触发器");
            return false;
        }
        for (TriggerKey triggerKey : triggerKeys) {
            scheduler.unscheduleJob(triggerKey);
        }

        TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroupName);

        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity(new TriggerKey(triggerName, triggerGroupName))
                .withSchedule(CronScheduleBuilder.cronSchedule(cron))
                .build();
        CronTriggerImpl cronTrigger = (CronTriggerImpl) trigger;
        cronTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
        scheduler.rescheduleJob(triggerKey, cronTrigger);
        return true;
    }

    /**
     * 移除一个job
     *
     * @param jobName
     * @param jobGroupName
     * @return
     * @throws SchedulerException
     */
    public boolean removeJob(String jobName, String jobGroupName) throws SchedulerException {

        try {
            JobKey jobKey = new JobKey(jobName, jobGroupName);
            if (isExistJob(jobKey)) {
                scheduler.deleteJob(jobKey);
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 移除一个job
     *
     * @param jobKey
     * @return
     * @throws SchedulerException
     */
    public boolean removeJob(JobKey jobKey) throws SchedulerException {

        try {
            if (isExistJob(jobKey)) {
                scheduler.deleteJob(jobKey);
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }


    /**
     * @param
     * @Author:
     * @Description: 移除所有的job
     * @Date:Created in 2020/11/18_11:16
     * @Modify by:
     */
    public void removeAllJobs() {
        try {
            for (String groupName : scheduler.getJobGroupNames()) {
                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
                    if (isExistJob(jobKey)) {
                        scheduler.deleteJob(jobKey);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 暂停一个作业
     *
     * @param jobName
     * @param groupName
     * @return
     * @throws SchedulerException
     */
    public boolean pauseJob(String jobName, String groupName) throws SchedulerException {
        JobKey jobKey = new JobKey(jobName, groupName);
        scheduler.pauseJob(jobKey);
        return true;
    }

    /**
     * 恢复一个作业
     *
     * @param jobName
     * @param groupName
     * @return
     * @throws SchedulerException
     */
    public boolean resumeJob(String jobName, String groupName) throws SchedulerException {
        JobKey jobKey = new JobKey(jobName, groupName);
        scheduler.resumeJob(jobKey);
        return true;
    }

    public boolean shutDownScheduler() throws SchedulerException {
        scheduler.shutdown(true);
        return true;
    }


    /**
     * 获取下次的执行时间列表
     *
     * @param cron     cron表达式
     * @param numTimes 多少个
     * @return Date
     */
    public static List<Date> getNextFireTimeDate(String cron, Integer numTimes) {

        List<Date> dates = null;
        try {
            CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
            cronTriggerImpl.setCronExpression(cron);
            dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dates;
    }

    /**
     * 获取trigger状态:
     * None:Trigger已经完成,且不会在执行,或者找不到该触发器,或者Trigger已经被删除
     * NORMAL:   正常状态
     * PAUSED:  暂停状态
     * COMPLETE:触发器完成,但是任务可能还正在执行中
     * BLOCKED: 线程阻塞状态
     * ERROR:   出现错误
     *
     * @param triggerName
     * @param triggerGroup
     * @return
     * @throws SchedulerException
     */
    public String getTriggerState(String triggerName, String triggerGroup) throws SchedulerException {
        TriggerKey triggerKey = new TriggerKey(triggerName, triggerGroup);
        Trigger.TriggerState triggerState = scheduler.getTriggerState(triggerKey);
        return triggerState.name();

    }

    /**
     * 安全关闭
     *
     * @throws SchedulerException
     */
    public void safeShutdown() throws SchedulerException {
        if (!scheduler.isShutdown()) {
            int executingJobSize = scheduler.getCurrentlyExecutingJobs().size();
            logger.info("安全关闭 当前还有" + executingJobSize + "个任务正在执行,等待完成后关闭");
            //等待任务执行完后安全关闭
            scheduler.shutdown(true);

            logger.info("安全关闭 成功");
        }
    }
}

3、QuartzJobFactory工厂类


import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
import org.springframework.stereotype.Component;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:06 2020/11/21
 * @Modify by:
 */
@Component
public class QuartzJobFactory extends SpringBeanJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        // 调用父类的方法
        Object jobInstance = super.createJobInstance(bundle);
        // 进行注入
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

4、QuartzConfig配置类

import org.quartz.Scheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:07 2020/12/21
 * @Modify by:
 */
@Configuration

public class QuartzConfig {

    @Autowired
    private QuartzJobFactory quartzJobFactory;

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setJobFactory(quartzJobFactory);
        QuartzJobListener jobListener = new QuartzJobListener();
        //添加job监听器,或其它trigger监听器
        factory.setGlobalJobListeners(jobListener);
        return factory;
    }

    @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }

}

5、QuartzJobListener监听类,可在job执行前后随意加逻辑


import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:08 2020/12/21
 * @Modify by:
 */
public class QuartzJobListener implements JobListener {
    @Override
    public String getName() {
        return "QuartzJobListener";
    }


    /**
     * @param
     * @Author:
     * @Description:任务执行之前执行
     * @Date:Created in 2020/12/21_14:26
     * @Modify by:
     */
    @Override
    public void jobToBeExecuted(JobExecutionContext jobExecutionContext) {

        System.out.println("QuarztJob开始执行!!!");
    }


    /**
     * @param
     * @Author:
     * @Description: 这个方法正常情况下不执行, 但是如果当TriggerListener中的vetoJobExecution方法返回true时, 那么执行这个方法;
     * 需要注意的是如果此方法执行那么前后这俩个方法不会执行,因为任务被终止了嘛.
     * @Date:Created in 2020/12/21_14:26
     * @Modify by:
     */
    @Override
    public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) {

        System.out.println("QuartzJob执行出现异常,任务被终止!!!");

    }

    /**
     * @param
     * @Author:
     * @Description:任务执行完成后执行
     * @Date:Created in 2020/12/21_14:27
     * @Modify by:
     */
    @Override
    public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e) {

        System.out.println("QuartzJob执行完毕!!!");

    }
}

6、job类

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:18 2020/12/21
 * @Modify by:
 */
public class QuartzJob implements Job {

    @Autowired
    private QuartzServce quartzServce;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        //获取创建job时传过来的参数
        JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
        String param1 = jobDataMap.get("param1").toString();
        String param2 = jobDataMap.get("param2").toString();
        String param3 = jobDataMap.get("param3").toString();
        //调取quartzServce服务方法
        quartzServce.doEverying(param1, param2, param3);
    }
}

7、JobProducer job任务生产类

import org.quartz.JobDataMap;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:10 2020/12/21
 * @Modify by:
 */
@Component
public class JobProducer {
    @Autowired
    private QuartzManager quartzManager;
    private void ProductJob() {
        String jobName = "jobName1";
        String jobGroupName = "jobGroupName1";
        String triggerName = "triggerName1";
        String triggerGroupName = "triggerGroupName1";
        String cron = "0 0 /1 * * ? ";
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("param1", "param1");
        jobDataMap.put("param2", "param2");
        jobDataMap.put("param3", "param3");
        jobDataMap.put("param4", "param4");
        try {
            quartzManager.addJob(jobName, jobGroupName, triggerName, triggerGroupName, QuartzJob.class, cron, jobDataMap);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }
}

7、QuartzServce自定义业务逻辑类

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:20 2020/12/21
 * @Modify by:
 */
public interface QuartzServce {

    void doEverying(String param1, String param2, String param3);
}

7、QuartzServceImpl自定义业务逻辑实现类

import org.springframework.stereotype.Service;

/**
 * @Author:
 * @Description:
 * @Date:Created in 14:22 2020/12/21
 * @Modify by:
 */

@Service
public class QuartzServceImpl implements QuartzServce {
    @Override
    public void doEverying(String param1, String param2, String param3) {

    }
}

全套集成代码即拿即用,有问题欢迎大家留言、点赞

### 回答1: Spring Boot可以很方便地整合Quartz,只需要在pom.xml中添加相关依赖,然后在配置文件中配置Quartz相关属性即可。 具体步骤如下: 1. 在pom.xml中添加Quartz依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 在配置文件中配置Quartz相关属性: ``` spring.quartz.job-store-type=jdbc spring.quartz.jdbc.initialize-schema=always spring.quartz.properties.org.quartz.scheduler.instanceName=myScheduler spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate spring.quartz.properties.org.quartz.jobStore.dataSource=myDS spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ spring.quartz.properties.org.quartz.dataSource.myDS.driverClassName=com.mysql.jdbc.Driver spring.quartz.properties.org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/quartz?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.quartz.properties.org.quartz.dataSource.myDS.user=root spring.quartz.properties.org.quartz.dataSource.myDS.password=root ``` 3. 创建Job类和Trigger类: ``` @Component public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Hello, Quartz!"); } } @Configuration public class QuartzConfig { @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class) .withIdentity("myJob") .storeDurably() .build(); } @Bean public Trigger myTrigger() { return TriggerBuilder.newTrigger() .forJob(myJobDetail()) .withIdentity("myTrigger") .withSchedule(CronScheduleBuilder.cronSchedule("/5 * * * * ?")) .build(); } } ``` 4. 在启动类中注入SchedulerFactoryBean并启动Quartz: ``` @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private SchedulerFactoryBean schedulerFactoryBean; @PostConstruct public void startQuartz() throws SchedulerException { schedulerFactoryBean.getScheduler().scheduleJob(quartzConfig.myJobDetail(), quartzConfig.myTrigger()); } } ``` 这样就完成了Spring Boot整合Quartz的配置。在启动应用程序时,Quartz自动创建表并启动定时任务。 ### 回答2: Spring Boot是基于Spring Framework的快速应用开发框架,而Quartz是一个任务调度框架,可以帮助我们定义和执行各种类型的后台作业。本文将为你介绍如何使用Spring Boot整合Quartz框架。 1. 添加依赖 在Spring Boot使用Quartz需要添加以下依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.3.0</version> </dependency> ``` 2. 配置JobQuartz中,Job是需要执行的任务,我们需要定义一个类来实现这个Job。 ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 任务逻辑 } } ``` 3. 配置Trigger 在Quartz中,Trigger用于定义任务执行的时间和频率。 ``` public class MyTrigger { public Trigger getTrigger() { return TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) .forJob("myJob", "group1") .build(); } } ``` 在上面的代码中,我们使用Cron表达式来定义Job的执行时间。 4. 配置Scheduler 在Quartz中,Scheduler是最核心的部分,它负责管理所有的Job和Trigger,并按照预定的时间执行任务。 ``` @Configuration public class SchedulerConfig { @Autowired private ApplicationContext applicationContext; @Bean public SchedulerFactoryBean schedulerFactoryBean() throws IOException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setQuartzProperties(quartzProperties()); factory.setJobFactory(springBeanJobFactory()); return factory; } @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); propertiesFactoryBean.afterPropertiesSet(); return propertiesFactoryBean.getObject(); } @Bean public SpringBeanJobFactory springBeanJobFactory() { AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); jobFactory.setApplicationContext(applicationContext); return jobFactory; } @Bean public Scheduler scheduler() throws IOException { return schedulerFactoryBean().getScheduler(); } @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .storeDurably() .build(); } @Bean public Trigger myTrigger() { return new MyTrigger().getTrigger(); } @PostConstruct public void init() throws SchedulerException, IOException { scheduler().addJob(myJobDetail(), true); scheduler().scheduleJob(myTrigger()); scheduler().start(); } } ``` 在上面的代码中,我们创建了一个SchedulerFactoryBean用于创建Scheduler实例,并在配置类中创建了多个Bean,包括JobDetail、Trigger和自定义的SpringBeanJobFactory。 最后,在@PostConstruct注解下,我们将Job和Trigger添加到Scheduler实例中,并启动Scheduler开始任务调度。 5. 编写Quartz.properties文件 在resources目录下创建quartz.properties文件,用于配置Quartz的一些属性。 ``` org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/mydb org.quartz.dataSource.myDS.user = myuser org.quartz.dataSource.myDS.password = mypassword org.quartz.dataSource.myDS.maxConnections = 10 ``` 以上就是使用Spring Boot整合Quartz框架的全部步骤,通过以上步骤,我们可以轻松地创建和调度各种类型的后台任务。 ### 回答3: Spring Boot 是一个基于 Spring 框架的快速开发框架,使得构建Spring应用程序非常容易。Quartz 是一个用于作业调度的开源框架,可以通过定义任务和调度器来实现任务的自动化调度。Spring BootQuartz 框架的整合,则可以帮助开发人员更加便捷地实现任务调度。 Spring Boot整合Quartz的步骤如下: 1.在 pom.xml 中添加 Quartz 的依赖: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> ``` 2.创建一个 Job 类,在该类中实现具体要执行的任务逻辑,并继承 org.quartz.Job 接口: ```java public class HelloWorldJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Hello World."); } } ``` 3.在配置文件中添加 quartz 相关的配置,例如在 application.properties 文件中添加如下配置: ``` spring.quartz.job-store-type=jdbc spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.quartz.jdbc.initialize-schema=always ``` 4.创建 SchedulerFactoryBean 类,用于创建调度器,并将 Job 注册到调度器中: ```java @Configuration public class QuartzConfig { @Autowired private DataSource dataSource; @Bean public JobDetail jobDetail() { return JobBuilder.newJob(HelloWorldJob.class) .withIdentity("helloJob") .storeDurably() .build(); } @Bean public Trigger trigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever(); return TriggerBuilder.newTrigger() .forJob(jobDetail()) .withIdentity("helloTrigger") .withSchedule(scheduleBuilder) .build(); } @Bean public SchedulerFactoryBean schedulerFactory() { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setDataSource(dataSource); schedulerFactoryBean.setJobDetails(jobDetail()); schedulerFactoryBean.setTriggers(trigger()); return schedulerFactoryBean; } } ``` 在 SchedulerFactoryBean 类中,首先创建了一个 JobDetail 类,用于描述 Job 相关的信息。然后,通过调用 TriggerBuilder 类的 newTrigger() 方法创建了一个 trigger,用于描述 Job 调度的策略和时间。最后,通过调用 SchedulerFactoryBean 的 setJobDetails() 方法和 setTriggers() 方法将 Job 和 trigger 注册到调度器中。 5.启动应用程序,任务就会开始按照调度器中定义的策略自动运行。 总的来说,Spring Boot整合Quartz非常容易,只需添加相应的依赖、编写 Job 类和 SchedulerFactoryBean 类,并在配置文件中添加相关的配置即可获得方便的任务调度功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值