spring定时器定时任务到时间未执行问题的解决
目录
- spring定时器定时任务到时间未执行
- 应用场景
- 原因分析
- 解决方式
- 解决修改系统时间后Spring 定时任务不执行
- 问题描述
- 起因
- 错误
- 解决问题
spring定时器定时任务到时间未执行
应用场景
一个定时器类中有n个定时任务,有每30秒执行一次的还有每1分钟执行一次的,出现问题的定时任务是0点整时执行的定时任务到了0点没有执行。
原因分析
spring定时器任务scheduled-tasks默认配置是单线程串行执行的,当某个定时任务出现阻塞,或者执行时间过长,则线程就会被占用,其他定时任务排队执行,导致后面的定时任务未能准时执行。
解决方式
开启多线程定时任务执行
/** * 多线程执行定时任务 */ @Configurable public class ScheduleConfig implements SchedulingConfigurer { private static final int FIVE = 5; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(FIVE)); } }
解决修改系统时间后Spring 定时任务不执行
问题描述
Spring 定时任务不执行
事情起因是这样的,我们有一个spring定时任务,每隔半小时要执行一次。
起因
由于种种原因,昨晚上这台服务器被关机了,今早【重启服务器】和【启动定时任务服务】。
机器重启后,发现服务器机器系统时间和实际北京时间不一致,相差10个小时。
于是乎,我使用date -s 10:35:35 设置和北京时间保持一致。
错误
本以为这样,时间已经一致了,定时任务应该能正常执行了!
等了好几个小时,定时任务依然没有执行。
于是查看系统日志,系统日志一切正常,只是没有定时任务执行的log日志。
解决问题
奇了个怪,服务正常启动,但定时任务没有执行。
然而昨天还在跑的服务,就因为一次关机,就over了?
不可能,于是关掉应用服务再次重启。
定时任务执行成功了,于是得出结论: 服务器系统时间改变后,Spring 定时任务将失效。
服务器系统时间改变后,Spring 定时任务将失效,解决方法就是:重启应用服务。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Spring Task定时任务每天零点执行一次的操作
最近根据项目的需求,需要限制用户每天的发送短信数量.这样以来就需要写一个定时任务,每天去置零一次所有用户的发送短信统计数量. 首先,在application.xml文件中添加 <task:annotation-driven /> 接着就是编写自己的业务处理逻辑 package com.*.*.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.sch
-
springboot定时任务@Scheduled执行多次的问题
目录 springboot定时任务@Scheduled执行多次 原因 解决方法 使用 @Scheduled 定时任务突然不执行了 springboot定时任务@Scheduled执行多次 在spring boot开发定时任务时遇到一个很怪异的现象..我进行调试模式,在没有bug的情况下.执行了三 次才停止..如图: 原因 是因为执行时间太短,在CronSequenceGenerator.class的next方法. public Date next(Date date) { Calendar ca
-
springboot schedule 解决定时任务不执行的问题
@schedule 注解 是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时,会影响到其他定时任务的执行,因为schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的.解决办法是重新配置schedule,改为多线程执行.只需要增加下面的配置类就可以了. import org.springframework.boot.autoconfigure.batch.BatchProperties; import org.springfr
-
SpringBoot 定时任务遇到的坑
前言 springboot已经支持了定时任务Schedule模块,一般情况已经完全能够满足我们的实际需求.今天就记录一下我使用 schedule 时候踩的坑吧. 想要使用定时,我们首先要开启支持,其实就是在启动类上面加个注解就 Ok. @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(A
-
spring定时器定时任务到时间未执行问题的解决
目录 spring定时器定时任务到时间未执行 应用场景 原因分析 解决方式 解决修改系统时间后Spring 定时任务不执行 问题描述 起因 错误 解决问题 spring定时器定时任务到时间未执行 应用场景 一个定时器类中有n个定时任务,有每30秒执行一次的还有每1分钟执行一次的,出现问题的定时任务是0点整时执行的定时任务到了0点没有执行. 原因分析 spring定时器任务scheduled-tasks默认配置是单线程串行执行的,当某个定时任务出现阻塞,或者执行时间过长,则线程就会被占用,其他定时
-
Spring多定时任务@Scheduled执行阻塞问题解决
目录 一. 问题描述 二. 场景复现 三. 解决方案 方案一:使用@Async注解实现异步任务 方案二:手动设置定时任务的线程池大小 四. 总结 一. 问题描述 最近项目中发现一个问题,计划每日凌晨4:40执行一个定时任务,使用注解方式: @Scheduled(cron = “0 40 4 * * ?”),cron表达式明显没有问题,但是这个定时任务总是不按时执行,有时候得等到8点多,有时候9点多才执行.后来查了下,原来这种定时方式默认是单线程执行的,恰好我这里有多个定时任务,并且其中有个在4:
-
JAVA中 Spring定时器的两种实现方式
目前有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz. 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run() { ... } } 在Spring定义 ... 配置Spring定时器 <bean id=&quo
-
Spring Task定时任务的配置和使用详解
记录下Spring自带的定时任务用法. spring中使用定时任务 基于xml配置文件使用定时任务 首先配置spring开启定时任务 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/
-
java 中Spring task定时任务的深入理解
java 中Spring task定时任务的深入理解 在工作中有用到spring task作为定时任务的处理,spring通过接口TaskExecutor和TaskScheduler这两个接口的方式为异步定时任务提供了一种抽象.这就意味着spring容许你使用其他的定时任务框架,当然spring自身也提供了一种定时任务的实现:spring task.spring task支持线程池,可以高效处理许多不同的定时任务.同时,spring还支持使用Java自带的Timer定时器和Quartz定时框架.
-
spring中定时任务taskScheduler的详细介绍
前言 众所周知在spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态.也可以使用cron表达式设置定时任务. 被执行的类要实现Runnable接口 TaskScheduler接口 TaskScheduler是一个接口,TaskScheduler接口下定义了6个方法 1.schedule(Runnable task, Trigger trigger); 指定一个触发器执行定时任务.可以使用CronTrigger来指定Cron表达式,执行定时任务
-
Spring实现动态修改时间参数并手动开启关停操作
spring实现定时任务的方式有三种,分别是java自带的timer类.spring task和quartz三种. 本文只介绍spring自带的task和第三方quartz.spirng task可以将它比作一个轻量级的Quartz,使用起来非常简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种.接着直接演示spring task注解实现方式. 首先,创建任务类,如下: @Component public class MyScheduler { int i =0; publ
-
详解Spring Boot 定时任务的实现方法
最近在用SpringBoot写一个关于定时项目的时候遇到一个问题,就是客户端访问服务器的结果实际上是每个一段时间发生一次变化,并且在服务器在每天的某个固定的时间点都要触发一次事件. 我们当然可以在遇到每一个请求时都重新计算结果,但是为了提高效率,我们显然可以让服务器每隔一段时间计算一次结果,并且把这个结果进行保存,对在下一个时间段内的每个请求都直接返回计算后的结果.这样就能较好的提高了服务器的性能. 那么问题就在于如何处理定时任务.其实SpringBoot早就提供了非常方便的接口,但是网上的介绍
-
Spring boot定时任务的原理及动态创建详解
v一.前言 定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务.这篇文章主要给大家介绍了关于Spring boot定时任务的原理及动态创建的相关内容,下面来一起看看详细的介绍吧 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做成可配置是有一定难度的.数据规则这块必须强烈要求统一,服务器.文件名规则都可以从配置中心去读.每新增一个省份的配置,后
随机推荐
- Swift网络请求库Alamofire使用详解
- vue.js评论发布信息可插入QQ表情功能
- 简单了解Java编程中对异常处理的运用
- ORACLE中的的HINT详解
- 分享JavaScript与Java中MD5使用两个例子
- 匹配form表单中所有内容的正则表达式
- php使用正则表达式获取字符串中的URL
- C#解码base64编码二进制数据的方法
- 基于C语言字符串函数的一些使用心得
- Android滑动动态分页实现方法
- javascript实现漂亮的拖动层,窗口拖拽特效
- ASP.NET中XML转JSON的方法实例
- Java非静态成员变量之死循环(详解)
- JS仿淘宝搜索框用户输入事件的实现
- Node.js的MongoDB驱动Mongoose基本使用教程
- 深入Java Robot实现控制鼠标和键盘的方法详解
- C++抽奖程序实现方法
- 详解C++程序中定义struct结构体的方法
- thinkphp在低版本Nginx 下支持PATHINFO的方法分享
- Python 查看文件的读写权限方法