使用springboot时,@Scheduled定时器遇到的问题
2017-09-18 21:42
435 查看
@Scheduled 这个注解确实给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了。
但是,我们需要注意的是,@Scheduled 并不一定一定会按时执行。
因为使用@Scheduled 的定时任务虽然是异步执行的,但是,不同的定时任务之间并不是并行的!!!!!!!!
在其中一个定时任务没有执行完之前,其他的定时任务即使是到了执行时间,也是不会执行的,它们会进行排队。
也就是如果你想你不同的定时任务互不影响,到时间就会执行,那么你最好将你的定时任务方法自己搞成异步方法,这样,
定时任务其实就相当于调用了一个线程执行任务,一瞬间就结束了。当然,也可以勉强当做是任务都会定时执行。
下面说一下@Scheduled 注解的几个参数:
1、可以通过配置文件配置进来的
// 使用表达式,该表达式表示每一秒中执行一次。如果上一次方法超过了定时时间还没有执行完,那么下一次定时不会执行,
// 直到上次方法执行完后,就会立即执行下一次的定时任务
// 该方式在工程启动的时候,并不会立即执行,会按照定时表达式的规律进行执行。例如这里,就是1秒后才会执行。
@Scheduled(cron="0/1 * * * * ?")
// 该方式和上一个的不同在于多加了一个参数,这个参数是一个初始化参数。
// 加上initialDelayString后,在刚启动的时候,就不会立即执行了,而是会等到10秒之后才会执行,即使fixedRateString才
// 1秒钟。也会在10秒后才会第一次执行。
// 注意:initialDelayString不能喝cron组合使用。
// 使用固定延迟。该表达式表示每次执行完后一秒再次执行。每一次执行,无论执行多长时间,下一次执行都会在上一次方法
// 执行完后,再过一秒钟,再次执行。
// 该方式在工程启动的时候,会立即执行,接下来会按规律进行执行。
@Scheduled(fixedDelayString="1000")
2、不可通过配置文件配置的 (作用相同)
@Scheduled(fixedRate=1000) // 它们都是接受一个long类型的参数
这里粘贴一下cron表达式的规则:
字段 允许值 允许的特殊字符
但是,我们需要注意的是,@Scheduled 并不一定一定会按时执行。
因为使用@Scheduled 的定时任务虽然是异步执行的,但是,不同的定时任务之间并不是并行的!!!!!!!!
在其中一个定时任务没有执行完之前,其他的定时任务即使是到了执行时间,也是不会执行的,它们会进行排队。
也就是如果你想你不同的定时任务互不影响,到时间就会执行,那么你最好将你的定时任务方法自己搞成异步方法,这样,
定时任务其实就相当于调用了一个线程执行任务,一瞬间就结束了。当然,也可以勉强当做是任务都会定时执行。
下面说一下@Scheduled 注解的几个参数:
1、可以通过配置文件配置进来的
// 使用表达式,该表达式表示每一秒中执行一次。如果上一次方法超过了定时时间还没有执行完,那么下一次定时不会执行,
// 直到上次方法执行完后,就会立即执行下一次的定时任务
// 该方式在工程启动的时候,并不会立即执行,会按照定时表达式的规律进行执行。例如这里,就是1秒后才会执行。
@Scheduled(cron="0/1 * * * * ?")
// 使用固定速率。该表达式表示每隔一秒钟执行一次。如果上一次方法超过了1秒钟还没执行完,下一次任务也不会执行,直到 // 上次方法执行完,下次的定时就会立即执行。 // 该方式在工程启动的时候,会立即执行,接下来会按规律进行执行。
@Scheduled(fixedRateString="1000") // 单位:毫秒
// 该方式和上一个的不同在于多加了一个参数,这个参数是一个初始化参数。
// 加上initialDelayString后,在刚启动的时候,就不会立即执行了,而是会等到10秒之后才会执行,即使fixedRateString才
// 1秒钟。也会在10秒后才会第一次执行。
// 注意:initialDelayString不能喝cron组合使用。
@Scheduled(fixedRateString="1000",initialDelayString="10000")
// 使用固定延迟。该表达式表示每次执行完后一秒再次执行。每一次执行,无论执行多长时间,下一次执行都会在上一次方法
// 执行完后,再过一秒钟,再次执行。
// 该方式在工程启动的时候,会立即执行,接下来会按规律进行执行。
@Scheduled(fixedDelayString="1000")
2、不可通过配置文件配置的 (作用相同)
@Scheduled(fixedRate=1000) // 它们都是接受一个long类型的参数
@Scheduled(fixedDelay=1000)
@Scheduled(fixedRate=1000,initialDelay=10000)
这里粘贴一下cron表达式的规则:
字段 允许值 允许的特殊字符
秒 | 0-59 | , - * / | ||
分 | 0-59 | , - * / | ||
小时 | 0-23 | , - * / | ||
日期 | 1-31 | , - * ? / L W C | ||
月份 | 1-12 或者 JAN-DEC | , - * / | ||
星期 | 1-7 或者 SUN-SAT | , - * ? / L C # | ||
年(可选) | 留空, 1970-2099 | , - * / |
相关文章推荐
- 关于SpringBoot2.0版本使用过程中遇到问题
- 记录问题:springboot中使用Mybatis-pagehelper分页插件遇到的版本兼容问题
- 在idea里使用SpringBoot整合MyBatis时遇到的Mapper扫描不到的问题
- 关于使用springboot中遇到的些问题
- 【springboot】使用注解遇到的问题
- 记录spring boot使用中遇到的问题
- springboot使用遇到的问题
- 使用gradle来构建Spring boot时遇到的问题
- springboot的restController使用swagger遇到的问题。
- spring boot 项目增加flyway的使用遇到问题解决
- 使用Spring Boot搭建个人博客遇到的问题
- SpringBoot使用可能遇到的问题及解决方法
- spring boot 1.5.4使用JPA,遇到Mysql区分大小写的问题
- 使用spring redisTemplate.getValueSerializer()遇到的问题
- 安装springboot时遇到 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.问题
- 使用spring jdbc遇到的一个性能问题
- springboot打包jar ,war遇到的问题。
- 使用spring boot 改造老项目,多个数据源问题
- springboot中整合activiti流程设计器时遇到访问项目需要输入tomcat用户名和密码的问题
- 解决使用Spring Boot、Multipartfile上传文件路径错误问题