1、mop文件添加定时器依赖。
<!--定时器依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
2、创建QuartzConfig配置类。
@Configuration
public class QuartzConfig {
@Bean
public JobDetail printTimeJobDetailY(){
//调用JobBuilder的静态方法来创建JobDetail对象,并指定要执行的任务类(即CronJob类)
return JobBuilder.newJob(CronJobY.class)
//可以给该JobDetail起一个id
.withIdentity("DateTimeJobY")
//每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取//关联键值对
.usingJobData("msg", "Hello Quartz")
//即使没有Trigger关联时,也不需要删除该JobDetail
.storeDurably()
.build();
}
//如果你还有其他的定时任务可以在复制上面的Bean,然后创建对应的业务CronJobM类即可,如下
@Bean
public JobDetail printTimeJobDetailM(){
//调用JobBuilder的静态方法来创建JobDetail对象,并指定要执行的任务类(即CronJob类)
return JobBuilder.newJob(CronJobM.class)
//可以给该JobDetail起一个id
.withIdentity("DateTimeJobM")
//每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取//关联键值对
.usingJobData("msg", "Hello Quartz")
//即使没有Trigger关联时,也不需要删除该JobDetail
.storeDurably()
.build();
}
3、创建业务类CronJob。
/**
* <p>
* 定时任务job: 每年几月份执行
* </p>
*
* @author Wen Changping
* @date 2023/9/4 10:37
*/
@Slf4j
public class CronJobY extends QuartzJobBean {
@Autowired
private ItemConfigMapper itemConfigMapper;
@Autowired
private MAuItKpiFactMapper mAuItKpiFactMapper;
@Autowired
private ItemConfigServiceImpl itemConfigService;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//获取JobDetail中关联的数据
String msg = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("msg");
log.info("定时任务启动"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+msg);
/*
定时执行每年几月
*/
List<RuleConfigInfoJobVo> ruleConfigInfoJobVos = itemConfigMapper.yExecuteRuleJob();
log.info("定时执行每年几月:{}",ruleConfigInfoJobVos);
if (ruleConfigInfoJobVos != null){
ruleConfigInfoJobVos.forEach(i ->{
//定时任务无法获取当前登录用户id,所以这里获取新增预警项目配置的用户id做执行时的用户id及用户名等
ExecuteTriggerConfigInfoDTO dto = new ExecuteTriggerConfigInfoDTO();
dto.setRuleId(i.getRuleId());
dto.setScanBegDate(i.getPreviousMonthDate());
dto.setScanEndDate(i.getPreviousMonthDate());
PMUserVo pmUser = mAuItKpiFactMapper.getPMUserByUserId(i.getAddUser());
if (pmUser!=null){
dto.setCreateStaffName(pmUser.getUserName());
dto.setAddUser(String.valueOf(pmUser.getUserId()));
dto.setCreateStaffCode(String.valueOf(pmUser.getUserId()));
}
//执行
itemConfigService.executeRule(dto);
});
}
}
}
注:你有多个定时任务,则需要创建多个CronJob业务类,然后在QuartzConfig配置类中添加对应的Bean即可