ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spring boot 定时器

2022-09-06 15:32:10  阅读:220  来源: 互联网

标签:定时器 service spring boot 开启 cron 任务 参数 定时


spring boot定时器设置

 

在启动类上加注解

@EnableScheduling   开启定时器功能

今天做这个功能有点点复杂

大概就是 查询每条数据的流程节点执行人 和 当前流程节点
将筛选后的用户 去重 分别发出审核消息 和上报消息
数据一张表 定时任务一张表 定时任务表上写cron表达式

开启一个定时任务 将定时任务表与数据表联查 查出需要发消息的时间和用户

接下来是代码实现

代码不能直接贴
写成伪代码 凑活看吧



@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling // 2.开启定时任务(单线程
@RequiredArgsConstructor

//此类用于在系统重启或宕机后重启流程部署的定时任务
public class Config {

注入service层

@Scheduled(cron = "0 0 1 * * ?")
//初始化方法 每天一点执行一次
private void initProcess(){

      调用service层方法 查询出 定时任务表内的定时任务

List.forEach(scheduleTask -> {
//如果任务已存在会抛出异常 捕获异常后不做处理
try{
          //尝试开启定时任务
Service.start(scheduleTask);
}catch (Exception e){

}

});
}
}


service层的start方法

service层中第一了一个map 用于看定时任务是否重复
private Map<String, ScheduledFuture<?>> futureMap = new HashMap<>();

start(参数){
if (futureMap.containsKey(参数.getId())) {
throw Exception("已经存在重复任务");
}
//从数据库取出的cron表达式
String cron = 参数.getCron();


//这个是最重要的 虽然不知道什么原理 api调用工程师
ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(new MyRunnable(参数), new CronTrigger(cronExp));
System.out.println("开启定时任务");

//将参数id写进map
futureMap.put(参数.getId(), future);
}


myrunnable 类
private class MyRunnable implements Runnable {

run(){
    将参数与数据表联查

查出需要发消息的用户id
调用发送消息接口
发送消息不是我写的,能用就行


}


}

现在回顾看起来很简单,写了两天
缺陷是 cron表达式转换为中文字符串 找不到工具类 直接把cron表达式中文字符串在表里加了一个字段存起来
定时任务表每多一行就需要多开一个定时任务 我也不知道以后会怎样 感觉不太行的样子



标签:定时器,service,spring,boot,开启,cron,任务,参数,定时
来源: https://www.cnblogs.com/bawanglong168/p/16661975.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有