以下代码案例是基于Spring Boot框架。定义一个定时任务,我们需要明白这个定时任务是要我们做什么,什么时候做。
1.配置定时时间。在yml配置文件中配置定时任务的时间。
test
singleDef:
syncFileCron: '0 0 7 * * ?'
时间配置依次是秒分时日月年,具体配置这里不就详细解释了。
2.配置一个常量类,对应yml配置文件。一般一个yml有多个配置,为了方便管理,弄一个总的配置文件,里面管理其他的配置
@Component
@ConfigurationProperties("test")
@Data
public class Properties {
/**
* 定时任务对接相关配置
*/
private SingleDef singleDef;
}
@Component
@ConfigurationProperties("test.single-def")
public class SingleDef {
/**
* 同步的时间
*/
private String syncFileCron;
}
3.定义具体要做的事情
具体的方法实现:
@Configuration
public class QuartzConfig {
@Autowired
private properties properties;
//同步
@Bean(name = "syncOrgAndPeopleJob")
public MethodInvokingJobDetailFactoryBean unsubscribeJob(JobGetAll jobGetAll){
MethodInvokingJobDetailFactoryBean factoryBean = new MethodInvokingJobDetailFactoryBean();
factoryBean.setConcurrent(true);
factoryBean.setTargetObject(jobGetAll);
//设置总的job方法中要启动的方法名--syncOrgAndPeople
factoryBean.setTargetMethod("syncOrgAndPeople");
return factoryBean;
}
@Bean(name = "syncOrgAndPeopleCron")
public CronTriggerFactoryBean syncOrgAndPeopleCron(@Qualifier("syncOrgAndPeopleJob")MethodInvokingJobDetailFactoryBean unsubscribeJob){
CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
factoryBean.setJobDetail( unsubscribeJob.getObject() );
//每天早上7点同步
factoryBean.setCronExpression(properties.getSingleDef().getSyncFileCron());
return factoryBean;
}
@Bean(name = "sch")
public SchedulerFactoryBean schedulerFactoryBean(Trigger ... triggers){
SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
// 设置 triggers
factoryBean.setTriggers(triggers);
// 自动运行
factoryBean.setAutoStartup(true);
return factoryBean;
}
4.配置总的启动类,在这个类中可以对任务进行停止,重新启动等等操作
@Configuration
public class JobGetAll {
@Autowired
@Qualifier("sch")
private Scheduler scheduler;
@Autowired
private ISingleLoginService singleLoginService;
/**
* 同步
*
* @throws Exception 抛出异常
*/
public void syncOrgAndPeople() throws Exception {
//具体定时要做的事
singleLoginService.xxx();
}
}