quartz之SimpleTrigger
2020-03-05 本文已影响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;// 返回对象
}
}