package com.ann.demo.job;

import org.quartz.*;
import org.quartz.core.JobRunShell;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.Properties;

/**
 * @Author: LeiJiaXin
 * @Date: 2019/8/16 10:08
 */
@Component
public class SchedulerAllJob {

//    // 定时任务规则
//    public static String cron;
//
//    @Value("${file.scanningFilePath}")
//    private String cronTemp;
//
//    @PostConstruct
//    public void init() {
//        cron = cronTemp;
//    }


    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;


    /**
     * 该方法用来启动所有的定时任务
     *
     * @throws SchedulerException
     */
    public void scheduleJobs() throws SchedulerException {
        Scheduler scheduler = schedulerFactoryBean.getScheduler();
//        scheduleJob1(scheduler);
    }

    /**
     * 配置Job1
     * 此处的任务可以配置可以放到properties或者是放到数据库中
     * 如果此时需要做到动态的定时任务，请参考：http://blog.csdn.net/liuchuanhong1/article/details/60873295
     * 博客中的ScheduleRefreshDatabase类
     *
     * @param scheduler
     * @throws SchedulerException
     */
    private void scheduleJob1(Scheduler scheduler) throws SchedulerException {
        /*
         * 此处可以先通过任务名查询数据库，如果数据库中存在该任务，则按照ScheduleRefreshDatabase类中的方法，更新任务的配置以及触发器
         * 如果此时数据库中没有查询到该任务，则按照下面的步骤新建一个任务，并配置初始化的参数，并将配置存到数据库中
         */
        JobDetail jobDetail = JobBuilder.newJob(ScheduledJob.class).withIdentity("job1", "group1").build();
        // 凌晨1点-凌晨7点 每隔1分钟执行一次
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/5 0,1,2,3,4,5,6,7 * * ? ");
//        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * 16,17,18,19 * * ? ");
        CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job1", "group1").withSchedule(scheduleBuilder).build();
        scheduler.scheduleJob(jobDetail, cronTrigger);
    }

}
