范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot设置动态定时任务

  引入需要的依赖:        org.springframework.boot     spring-boot-starter-web            org.springframework.boot     spring-boot-starter-log4j2     true               org.springframework.boot     spring-boot-starter-validation            org.projectlombok     lombok     true    
  启动类:package com.wl.demo;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling;  @EnableScheduling @SpringBootApplication public class DemoApplication {       public static void main(String[] args) {         SpringApplication.run(DemoApplication.class, args);         System.out.println("(*^▽^*)启动成功!!!(〃"▽"〃)");     } }
  配置文件application.yml,只定义了服务端口:server:   port: 8089
  定时任务执行时间配置文件:task-config.ini:printTime.cron=0/10 * * * * ?
  定时任务执行类:package com.wl.demo.task;   import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component;   import java.time.LocalDateTime; import java.util.Date;  @Data @Slf4j @Component @PropertySource("classpath:/task-config.ini") public class ScheduleTask implements SchedulingConfigurer {       @Value("${printTime.cron}")     private String cron;       @Override     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {         // 动态使用cron表达式设置循环间隔         taskRegistrar.addTriggerTask(new Runnable() {             @Override             public void run() {                 log.info("Current time: {}", LocalDateTime.now());             }         }, new Trigger() {             @Override             public Date nextExecutionTime(TriggerContext triggerContext) {                 // 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则                 CronTrigger cronTrigger = new CronTrigger(cron);                 Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);                 return nextExecutionTime;             }         });     } }
  编写一个接口,使得可以通过调用接口动态修改该定时任务的执行时间:package com.wl.demo.controller;   import com.wl.demo.task.ScheduleTask; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  @Slf4j @RestController @RequestMapping("/test") public class TestController {       private final ScheduleTask scheduleTask;       @Autowired     public TestController(ScheduleTask scheduleTask) {         this.scheduleTask = scheduleTask;     }       @GetMapping("/updateCron")     public String updateCron(String cron) {         log.info("new cron :{}", cron);         scheduleTask.setCron(cron);         return "ok";     } }
  启动项目,可以看到任务每10秒执行一次:
  访问接口,传入请求参数cron表达式,将定时任务修改为15秒执行一次:
  可以看到任务变成了15秒执行一次
  除了上面的借助cron表达式的方法,还有另一种触发器,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,不像cron表达式只能定义小于等于间隔59秒。package com.wl.demo.task;  import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.scheduling.support.PeriodicTrigger; import org.springframework.stereotype.Component;  import java.time.LocalDateTime; import java.util.Date;  @Data @Slf4j @Component @PropertySource("classpath:/task-config.ini") public class ScheduleTask implements SchedulingConfigurer {      @Value("${printTime.cron}")     private String cron;      private Long timer = 10000L;      @Override     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {         // 动态使用cron表达式设置循环间隔         taskRegistrar.addTriggerTask(new Runnable() {             @Override             public void run() {                 log.info("Current time: {}", LocalDateTime.now());             }         }, new Trigger() {             @Override             public Date nextExecutionTime(TriggerContext triggerContext) {                 // 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则                 //                CronTrigger cronTrigger = new CronTrigger(cron);                 //                Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);                  // 使用不同的触发器,为设置循环时间的关键,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,单位为毫秒                 PeriodicTrigger periodicTrigger = new PeriodicTrigger(timer);                 Date nextExecutionTime = periodicTrigger.nextExecutionTime(triggerContext);                 return nextExecutionTime;             }         });     } }
  增加一个修改时间的接口:package com.wl.demo.controller;   import com.wl.demo.task.ScheduleTask; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  @Slf4j @RestController @RequestMapping("/test") public class TestController {       private final ScheduleTask scheduleTask;       @Autowired     public TestController(ScheduleTask scheduleTask) {         this.scheduleTask = scheduleTask;     }       @GetMapping("/updateCron")     public String updateCron(String cron) {         log.info("new cron :{}", cron);         scheduleTask.setCron(cron);         return "ok";     }       @GetMapping("/updateTimer")     public String updateTimer(Long timer) {         log.info("new timer :{}", timer);         scheduleTask.setTimer(timer);         return "ok";     } }
  测试结果:

这个童年偶像也要毁了作者邢初对追星的人来说,偶像塌房可能会是比退圈更痛苦的走向对热恋里的情侣而言,亲眼见着爱人渐渐堕落自弃,往往比分手更让人心碎。梦境的打破,信念的冲击,就像近二十年来的名侦探柯南,连一顶帐篷撑起诗和远方南宁市民露营热背后需冷思考一顶帐篷撑起诗和远方露营热背后需冷思考安全环保问题不容忽视,相关政策出台规范微旅行蓝天白云,草地溪流,帐篷天幕这样的露营画面,早已成为许多市民游客的诗和远方。露营在去年就成了热词,勘定九州禹帝治水收天下九州作为中国的代称,至今仍有这种称谓。而九州是大禹首创。大禹之父名为鲧,祖父为颛顼帝,所以大禹是地道的黄帝的后裔。颛顼死后并没有把帝位传给他的儿子而传给他的外甥帝喾,但是帝喾死后直秦始皇软禁其母太后赵姬茅焦为何要替她冒死直谏秦始皇?头条创作挑战赛上篇说到嫪毐企图谋反,被刚要亲政的秦始皇嬴政残酷诛杀,那么接下来,太后赵姬和吕不韦的命运又将如何呢?根据史记和资治通鉴的记载,秦始皇嬴政在下令查办这件事时,是派了专门一生英名毁于厕所晋景公中国古代皇帝驾崩的原因有很多种,像因病去世追求长生嗑丹药而去世,极端一些也会因为被造反而死等等。而今天要介绍这位老哥,却是因为上厕所的时候掉在了茅坑里被活活溺死,可谓是最奇葩的一位吕雉(下)为保双位,计屠功臣,恳请高人!人彘情敌戚夫人吕雉挖空心思地想着挂牌老公刘邦建国初期最想要啥?肯定是政权的稳固啊!别人不知,她还不知道吗?当年刘邦为了打赢项羽,赢得天下,给韩信彭越英布这些嗷嗷能打的人开了一张空头支票,说打赢之1987年沙特赴北京买东风导弹,我方比出1根手指,亲王激动成交只有中国能帮助我们了!一九八七年,沙特阿拉伯富丽堂皇的王宫中,身着华丽长袍的国王紧急叫来一个男人,进行了一场秘密谈话,事关一场重量级的交易。谈话结束后,国王法赫德催促他前往中国,尽清朝军备到底有多烂?200年前吴三桂的装备竟助洪秀全拿下武汉近代中国历史之中的广东和广西一直以来就是革命之重地,而洪秀全则是广西首位起来反抗清朝统治的名历史人物。他在未得志之前也只不过是一个底层农民家庭的子孙。读书一直读到去广州参加了两次考游本昌拍摄济公时,遇到的三件怪事,至今无法解释相信大家记忆中济公的模样,应该就是游本昌老先生本人的模样吧。活佛一生1933年,游本昌出生在江苏,是家里唯一的男孩,从一出生就受到全家人的宠爱。据说一位僧人曾路过游本昌的家,看着尚不止潜望镜头!iPhone15系列还将配备新传感器,成像质量提升巨大关注数码圈的小伙伴都知道,今年发布的iPhone14Pro和iPhone14ProMax,其后置不再是万年不变的1200万像素了,升级到了4800万像素,这对于苹果来说可是不小的升酒后,发了这么个朋友圈我们当初那么热血,现在是怎么了?还是以前在贵阳的日子好,虽然穷了一点。上了班,研究吃的,种种花草,养点动物,写写打油诗春天去郊外踏踏青,秋天到河边抓虾搂螺蛳,夏天到地里啃西瓜,冬天架上炉子炖肉什么是好生活?对于一
这颗2000多年前我国天文学家发现的客星现在被科学家找到了2023年3月,天文学家们拍摄到了一张RCW86超新星残骸的新图像,揭示了这颗超新星在过去两千年中起源和演化的细节。这张新照片是由美国能源部的暗能量相机(DECam)在智利Cerr火箭与篮网交易报价方案!篮网在交易截止日前先后送出欧文和杜兰特两位当家球星,球队已经摆出了重建的姿态,只是由于球队未来的首轮签都在火箭队,所以本赛季还要继续保持球队的竞争力。据消息人士透露,篮网有意在本赛15万年前的工业痕迹在青海出现?难道地球文明真的在循环?有明确记载的最古老的人类文明可以追溯到大约6000年以前,与地球长达45。5亿年历史相比,这个时间跨度可以说是非常短暂,正因为如此,才有人猜测,我们所知的人类文明可能并不是地球上的NASA讨论猎户座飞船从月球返回后的热防护罩意外部分脱落事件在今天早些时候的媒体谈话中,美国宇航局的官员分享了阿特米斯1号飞行的最新情况,他们解释了来自航天器的数据分析结果和阿特米斯2号任务的前进方向。阿特米斯1号去年从美国宇航局的佛罗里达魅族20是要来了吗?3月8日,魅族官微发布了一张海报,里面的信息量还是有点大魅族更换了新Logo成立星际魅族同时宣布无界生态发布会将于3月30日在上海举行。这似乎也和一匹老万,去上海梅赛德斯奔驰文化中苹果春节发布会,至少带来3款新品,包括iPhone,有你喜欢的吗?按照惯例,苹果每年都会在春季发布一些新品,当然不会是重磅级产品,但是也有很多果粉期待的新品,比如之前苹果一般会在春季发布iPhoneSE手机,这是主打性价比的,很多买不起苹果高端i百亿补贴京东和拼多多,谁更优惠?红米note11TPro天玑81006。67英寸LCD屏144Hz刷新率后摄主摄6400万前摄1600万67W充电5080毫安,6GB128GBJD补贴价1399,PDD补贴价13养老保险断缴超过3个月,额度和记录将被清零?是真是假?3月财经新势力养老保险是我国重要的一项民生工程,对于保障参保人晚年的权益,有重要意义。从养老保险建立之初到现在,有很多退休人员因此受益。不过随着社会的发展,时代的变革,我国的养老保2013年,41岁顾春芳沦为死刑犯,这次她终于为奢靡享乐付出了代价女人,长得漂亮是优势,活得漂亮是本事。江苏常熟的顾春芳就是被老天爷赐予了这种优势的女人。她身高1。7米,身材婀娜多姿,面容秀丽顾盼生辉,曾被誉为常熟第一美女。就是这样一个出生于普通2023EBC瑞沃德展台精彩多多,等你来体验3月1719日,2023EBC第八届易贸生物产业大会暨易贸生物产业展览在苏州国际博览中心如期举办。作为中国领先的生物产业交流合作平台,本次会展聚焦分子诊断抗体药物细胞与基因治疗mR寓言悟理懒惰的麋鹿懒惰的麋鹿先奋斗,再享受整整一个秋天,灰熊都没来得及欣赏一下山水间绚烂的景色。它急急忙忙地寻找并储存准备过冬的食物。当初冬的寒风吹落树上最后一片叶子时,它完全准备好了。高兴的灰熊便