美文网首页
quartz之SimpleTrigger

quartz之SimpleTrigger

作者: 不知不怪 | 来源:发表于2020-03-05 18:19 被阅读0次
package com.gzz;

import java.util.Date;

import javax.annotation.PostConstruct;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.gzz.common.quartz.TestJob;

/**
 * @author https://www.jianshu.com/u/3bd57d5f1074
 * @date 2019-12-24 10:50:00
 */
@SpringBootApplication
public class Application {

    @Autowired
    private Scheduler scheduler;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    @PostConstruct
    public void run() throws SchedulerException {
        JobKey jobKey = new JobKey("availableTopic", "robot");
        JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();
        SimpleTriggerImpl trigger = new SimpleTriggerImpl();
        trigger.setName("SimpleTrigger+planName+planId");
        trigger.setStartTime(new Date());// 开始运行时间
        trigger.setRepeatInterval(1000);
        trigger.setRepeatCount(Integer.MAX_VALUE); // 运行次数
        trigger.setEndTime(new Date(new Date().getTime() + 3600));
        scheduler.scheduleJob(job, trigger);
    }
}


package com.gzz.common.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class TestJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("任务开始执行");
    }
}

以下为让job可以注入

package com.gzz.config;

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

/**
 * @类说明 任务调度器的配置
 * @author 高振中 MWW
 * @date 2019-02-28 09:44:27
 **/
@Configuration
public class SchedulerConfig {
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) {
        // Spring提供SchedulerFactoryBean为Scheduler提供配置信息,并被Spring容器管理其生命周期
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        // 设置自定义Job Factory,用于Spring管理Job bean
        schedulerFactoryBean.setJobFactory(jobFactory);
        return schedulerFactoryBean;
    }

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

package com.gzz.config;

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

@Component
public class JobFactory extends AdaptableJobFactory {
    /**
     * AutowireCapableBeanFactory接口是BeanFactory的子类
     * -可以连接和填充那些生命周期不被Spring管理的已存在的bean实例
     */
    @Autowired
    private AutowireCapableBeanFactory factory;

    /**
     * -创建Job实例
     */
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object job = super.createJobInstance(bundle);// 实例化对象
        factory.autowireBean(job);// 进行注入(Spring管理该Bean)
        return job;// 返回对象
    }
}

相关文章

网友评论

      本文标题:quartz之SimpleTrigger

      本文链接:https://www.haomeiwen.com/subject/dcccrhtx.html