package com.zy.QuartzConfiguration;
import java.util.HashMap;
import java.util.Map;
import org.springframework.batch.core.configuration.JobLocator;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
@Configuration
public class QuartzConfiguration {
//自动注入进来的是SimpleJobLauncher
@Autowired
private JobLauncher jobLauncher;
@Autowired
private JobLocator jobLocator;
/*用来注册job*/
/*JobRegistry会自动注入进来*/
@Bean
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor(JobRegistry jobRegistry){
JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor();
jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry);
return jobRegistryBeanPostProcessor;
}
@Bean
public JobDetailFactoryBean jobDetailFactoryBean(){
JobDetailFactoryBean jobFactory = new JobDetailFactoryBean();
jobFactory.setJobClass(QuartzJobLauncher.class);
jobFactory.setGroup("my_group");
jobFactory.setName("my_job");
Map map = new HashMap<>();
map.put("jobName", "zyJob");
map.put("jobLauncher", jobLauncher);
map.put("jobLocator", jobLocator);
jobFactory.setJobDataAsMap(map);
return jobFactory;
}
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(){
CronTriggerFactoryBean cTrigger = new CronTriggerFactoryBean();
System.out.println("------- : " + jobDetailFactoryBean().getObject());
cTrigger.setJobDetail(jobDetailFactoryBean().getObject());
cTrigger.setStartDelay(3000);
cTrigger.setName("my_trigger");
cTrigger.setGroup("trigger_group");
cTrigger.setCronExpression("0/3 * * * * ? "); //每间隔3s触发一次Job任务
return cTrigger;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(){
SchedulerFactoryBean schedulerFactor = new SchedulerFactoryBean();
schedulerFactor.setTriggers(cronTriggerFactoryBean().getObject());
return schedulerFactor;
}
}