springboot整合quartz多任务集成(真正的复制即用)

引入依赖:

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
</parent>
。。。
  	<dependency>
		<groupId>org.quartz-scheduler</groupId>
		<artifactId>quartz</artifactId>
		<version>2.2.3</version>
	</dependency>

	<!-- 添加 Scheduled 坐标 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
	</dependency>
	<!-- Sprng tx 坐标 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
	</dependency>

Job1.java

@PropertySource(value = "classpath:/config/quartz_job.properties")
@ConfigurationProperties(prefix = "quartz.job1")
@Component
public class Job1 extends ScheduledJob {

    private String cron;

    /**
     * 五秒钟跑一次
     *
     * @return
     */
    @Override
    public String getCron() {
        return cron;
    }

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

        System.out.println("job1 is running ************************");

    }

    public void setCron(String cron) {
        this.cron = cron;
    }
}

ScheduledJob.java

public abstract class ScheduledJob implements Job {

    @PostConstruct
    public void init() {
        TaskManager.JOB_LIST.add(this);
    }

    /**
     * cron表达式在线生成 http://cron.qqe2.com/
     *
     * @return
     */
    public abstract String getCron();

    /**
     * @param scheduler 0/5 * * * * ?
     * @throws SchedulerException
     */
    public void startJob(Scheduler scheduler) throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(this.getClass())
                .withIdentity(this.getClass().getName() + "-job", "group1").build();
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(getCron());
        CronTrigger cronTrigger = getCronTrigger(scheduleBuilder);
        scheduler.scheduleJob(jobDetail, cronTrigger);
    }

    /**
     * 若要自定义触发器,请在子类重写此方法
     *
     * @return
     */
    protected CronTrigger getCronTrigger(CronScheduleBuilder scheduleBuilder) {
        return TriggerBuilder.newTrigger().withIdentity(this.getClass().getName() + "-trigger", "group1")
                .withSchedule(scheduleBuilder).build();

    }
}

SchedulerListener.java

@Configuration
public class SchedulerListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    public TaskManager taskManager;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        try {
            taskManager.executeTasks();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        return schedulerFactoryBean;
    }

}

TaskManager.java

/**
 * 定时任务管理者
 */
@Component
public class TaskManager {

    /**
     * 存放所有定时任务
     */
    public static final List<ScheduledJob> JOB_LIST = new ArrayList<>();

    @Autowired
    SchedulerFactoryBean schedulerFactoryBean;

    /**
     * 执行所有定时任务
     */
    public void executeTasks() {

        if (!CollectionUtils.isEmpty(JOB_LIST)) {
            for (ScheduledJob job : JOB_LIST) {
            	if (StringUtils.isEmpty(job.getCron())) {
                    System.out.println("无效定时任务:"+job.getClass());
                    continue;
                }
                try {
                    //跑起来
                    job.startJob(schedulerFactoryBean.getScheduler());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

quartz_job.properties

quartz.job1.cron=0/5 * * * * ?

运行效果:
运行效果

猜你喜欢

转载自blog.csdn.net/gryhan/article/details/89406296