package com.trs.project.config;
import com.trs.project.timer.Business116AntOrther;
import com.trs.project.timer.Business5000Task;
import com.trs.project.timer.BusinessFTPDATETask;
import com.trs.project.timer.BusinessTask;
import org.quartz.JobDetail;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;

/**
 * Quartz 定时任务配置类，负责创建
 * JobDetail对象
 * Trigger对象
 * Scheduler对象
 * @author Administrator
 */
@Configuration
public class QuartzConfig {

    @Value("${timer.cron116}")
    private String cron116;

    @Value("${timer.cron5000}")
    private String cron5000;

    @Value("${timer.cronFTP}")
    private String cronFTP;


    // 配置定时任务1 ， QuartzDemo q1第一个任务类对象
    @Bean(name = "j116")
    public MethodInvokingJobDetailFactoryBean firstJobDetail116(Business116AntOrther business116AntOrther) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(false);
        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(business116AntOrther);
        // 需要执行的方法
        jobDetail.setTargetMethod("execute");
        return jobDetail;
    }
    // 配置触发器1
    @Bean(name="trigger116")
    public CronTriggerFactoryBean cronTriggerFactoryBean116(JobDetail j116) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(j116);
        // 设置触发时间，从0秒开始，每3分钟执行一次。
        factory.setCronExpression(cron116);
        return factory;
    }

    // 配置定时任务1 ， QuartzDemo q1第一个任务类对象
    @Bean(name = "j5000")
    public MethodInvokingJobDetailFactoryBean firstJobDetail5000(Business5000Task business5000Task) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(false);
        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(business5000Task);
        // 需要执行的方法
        jobDetail.setTargetMethod("execute");
        return jobDetail;
    }
    // 配置触发器1
    @Bean(name="trigger5000")
    public CronTriggerFactoryBean cronTriggerFactoryBean5000(JobDetail j5000) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(j5000);
        // 设置触发时间，从0秒开始，每3分钟执行一次。
        factory.setCronExpression(cron5000);
        return factory;
    }

    // 配置定时任务1 ， QuartzDemo q1第一个任务类对象
    @Bean(name = "jFTPDATETask")
    public MethodInvokingJobDetailFactoryBean firstJobDetailFTP(BusinessFTPDATETask businessFTPDATETask) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        jobDetail.setConcurrent(false);
        // 为需要执行的实体类对应的对象
        jobDetail.setTargetObject(businessFTPDATETask);
        // 需要执行的方法
        jobDetail.setTargetMethod("execute");
        return jobDetail;
    }
    // 配置触发器1
    @Bean(name="triggerFTPDATETask")
    public CronTriggerFactoryBean cronTriggerFactoryBeanFTP(JobDetail jFTPDATETask) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(jFTPDATETask);
        // 设置触发时间，从0秒开始，每3分钟执行一次。
        factory.setCronExpression(cronFTP);
        return factory;
    }

}
 