如图 我想在controller 用几行代码让他隔几分钟执行一次,忘记怎么写了,能否教教我!感谢!
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
小P聊技术 2021-05-18 16:34最佳回答 专家已采纳while
(
true
) {
//代码段
// 业务方法
}
但是不建议这么去做,还是使用定时器合理一些
假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在Application中设置启用定时任务功能@EnableScheduling。
启动定时任务
package com.scheduling; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class); } }
其中 @EnableScheduling 注解的作用是发现注解@Scheduled的任务并后台执行。
定时任务具体实现类
接下来我们来创建一个定时任务
package com.Scheduler.utils; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class Scheduler{ private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); //每隔2秒执行一次 @Scheduled(fixedRate = 2000) public void testTasks() { System.out.println("定时任务执行时间:" + dateFormat.format(new Date())); } //每天3:05执行 @Scheduled(cron = "0 05 03 ? * *") public void testTasks() { System.out.println("定时任务执行时间:" + dateFormat.format(new Date())); } }
运行Spring Boot,输出结果为如下,每2秒钟打印出当前时间。
定时任务执行时间:23:28:00 定时任务执行时间:23:28:02 定时任务执行时间:23:28:04 定时任务执行时间:23:28:06 定时任务执行时间:23:28:08
注意: 需要在定时任务的类上加上注释:@Component,在具体的定时任务方法上加上注释@Scheduled即可启动该定时任务。
@Scheduled参数描述
- @Scheduled(fixedRate=3000):上一次开始执行时间点后3秒再次执行;
- @Scheduled(fixedDelay=3000):上一次执行完毕时间点3秒再次执行;
- @Scheduled(initialDelay=1000, fixedDelay=3000):第一次延迟1秒执行,然后在上一次执行完毕时间点3秒再次执行;
- @Scheduled(cron="* * * * * ?"):按cron规则执行;
cron规则
cron表达式中各时间元素使用空格进行分割,表达式有至少6个(也可能7个)分别表示如下含义:
- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 天(月)(0~31,但是你需要考虑你月的天数)
- 月(0~11)
- 天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
- 7.年份(1970-2099)
其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.
- 0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
- 0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
- 0 0 12 ? * WED 表示每个星期三中午12点
- "0 0 12 * * ?" 每天中午12点触发
- "0 15 10 ? * *" 每天上午10:15触发
- "0 15 10 * * ?" 每天上午10:15触发
- "0 15 10 * * ? *" 每天上午10:15触发
- "0 15 10 * * ? 2005" 2005年的每天上午10:15触发
- "0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
- "0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
- "0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
- "0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
- "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
- "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
- "0 15 10 15 * ?" 每月15日上午10:15触发
- "0 15 10 L * ?" 每月最后一日的上午10:15触发
- "0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
- "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
- "0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(2条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2021-05-18 16:13回答 3 已采纳 while(true) { //代码段 // 业务方法 } 但是不建议这么去做,还是使用定时器合理一些 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在App
- 2018-12-19 16:54回答 4 已采纳 不建议这样使用。可读性太差,效验复杂,代码杂乱,容易出问题。 首先你这个接口得参数可以有无数种变化,假设你想写个接口文档给后面开发的人看,那太比较蛋疼。 其次,你不可能参数一
- 2017-04-01 07:15回答 3 已采纳 是的,如果要求事务的话需要这样做,如果都是查询操作在一个controller里调多个service也没问题
- 2013-01-30 14:40回答 3 已采纳 在Controller中定义一个方法,并加上@ModelAttribute注解即可,被@ModelAttribute注解的方法(不要加@RequestMapping)在所有handler method
- 2016-08-02 07:52回答 3 已采纳 这种是错误的想法 你可以定义两个service方法,根据不同的条件去请求不同的service。
- 2016-10-23 03:38回答 6 已采纳 一个或多个controller,根据你的业务来划分。 一个或多个service,也是根据你的业务来划分。 总之没有绝对的标准,如果硬是要说标准,那就是让程序结构更加合理。
- 2020-08-17 16:50回答 4 已采纳 先说,我不知道定时中怎么获取,但我认为你的方法有问题。 1.定时任务是跑在服务端的任务调度,和有没有用户登录、用户登不登陆完全没关系 2.SecurityUtils获取用户信息的使用,肯定要在一次
- 2017-11-17 02:47回答 3 已采纳 不会,只是这种方式有点不灵活
- 2021-12-22 17:13回答 8 已采纳 仔细看看路径,看你界面存放的路径是否配置正确
- 2018-05-25 10:17回答 9 已采纳 @RequestParam是传递参数的. @RequestParam用于将请求参数区数据映射到功能处理方法的参数上。 ``` public String queryUserNa
- 没有解决我的问题, 去提问