Spingboot的定时器
来源:互联网 发布:软件著作权申请表打印 编辑:程序博客网 时间:2024/06/16 21:12
1.场景还原
定时器在我们项目实际需求中经常会遇到,有的同学可能会头疼,复杂的触发定时条件撸的我们身心俱疲,今天博主就springboot自带的定时器给大家引个道
2.实现方案
①在启动类中配置@EnableScheduling
@SpringBootApplication@MapperScan(basePackages = "com.cckj.dao", markerInterface =Mapper.class)@EnableSchedulingpublic class Application extends SpringBootServletInitializer { private static Logger logger = LoggerFactory.getLogger(Application.class); @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); logger.info("My Spring Boot Application Started"); }}这样工程就允许支持定时器了;剩下的就是触发定时任务的事儿了
②自定义定时任务类
@Componentpublic class Scheduler { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired UserService userService; @Scheduled(cron="0 0/1 * * * ?") //每分钟执行一次 public void statusCheck() { LocalDateTime localDateTime = LocalDateTime.now(); logger.info("每分钟执行一次。开始……:"+ localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); LocalDateTime localDateTime1 = LocalDateTime.now(); //statusTask.healthCheck(); logger.info("每分钟执行一次。结束:"+localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } @Scheduled(fixedRate=20000) public void testTasks() { List<User> userList = userService.getUser(); for (User u : userList){ logger.info(u.getName()+","+u.getPassword()); } }}申明一个定时任务
@Scheduled
然后其中的条件是何时触发定时任务的条件;其中
@Scheduled(fixedRate=20000)表示每隔20秒执行一次定时任务;
@Scheduled(fixedDelay=20000)表示定时任务完成后延迟20秒再次执行;
3.cron表达式说明
最重要的boss上场了
@Scheduled(cron="0 0/1 * * * ?") //每分钟执行一次接下来普及下cron表达式,只要记住几个常用的就行了
cron表达式一般只有7位
第一位,表示秒,取值0-59* 第二位,表示分,取值0-59* 第三位,表示小时,取值0-23* 第四位,日期天/日,取值1-31* 第五位,日期月份,取值1-12* 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思 另外:1表示星期天,2表示星期一。* 第7为,年份,可以留空,取值1970-2099
cron还有些特殊的字符(*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...(?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。(-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12(,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期一,星期二,星期四(/)斜杠:如:x/y,x是开始值,y是步长,比如在第一位(秒) 0/15就是,从0秒开始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y
举栗子0 0 3 * * ? 每天3点执行0 5 3 * * ? 每天3点5分执行0 5 3 ? * * 每天3点5分执行,与上面作用相同0 5/10 3 * * ? 每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行0 10 3 ? * 1 每周星期天,3点10分 执行,注:1表示星期天 0 10 3 ? * 1#3 每个月的第三个星期,星期天 执行,#号只能出现在星期的位置
根据自己的实际需求,各位同学选择相应的cron表达式把!可能有的同学还在疑惑,为什么我自己不能把开启定时器的控制权牢牢掌握在自己手里呢?为什么非要在启动类里面配置呢?笔者答案:方便,无需自己控制,也可满足实际的项目需求;启动类里面的配置无非就是允许工程支持定时器而已,并不是开启定时器;别想多了,他没想着跟你争权哦;
好了,我是张星;欢迎加入博主技术交流群,群号:313145288
阅读全文
1 0
- Spingboot的定时器
- spingBoot
- Spingboot中RESTful API的应用
- 刚建spingboot项目访问时候出现的错误
- SpingBoot 定时任务删除N个月前的log 数据记录
- SpingBoot之旅(一)——从一个简单的Demo入手
- SpingBoot集成shiro,MyRealm中无法@Autowired注入Service的问题
- spingboot 定时任务
- SpingBoot 404填坑
- spingboot 显示jsp页面
- spingboot入门步骤
- SpingBoot Logback配置文件撰写
- spingboot @EnableScheduling使用
- SpingBoot-HelloWorld创建
- Qt定时器:QObject类的定时器和定时器类QTimer
- Linux定时器的使用-内核驱动定时器
- 等待定时器与用户定时器的区别
- Linux定时器的使用-内核驱动定时器
- Java笔试题解-基本语法(2)
- 198. House Robber
- Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- CentOS下编译安装最新版Git
- Python环境初始化安装 -- Ubuntu系统
- Spingboot的定时器
- 摩拜单车完成超6亿美元 E 轮融资 接下来它要干什么?
- JavaScript立即执行函数的解释分析(4)—总结篇
- RESTful架构总结
- 解决linux中使用git,ssh每次都要输入密码
- Android Paint的使用详解
- 二维码工具类QrCodeUtils
- Qt学习06——内存分配策略
- 字符编码