Java定时任务解决方案
很多项目中都会遇到需要定时任务的情况,本篇文章就结合了Spring中以及SpringBoot、SpringCloud中定时任务的解决方案。
在Spring中使用定时器
用SpringBoot比较多的同学可能都会觉得Spring的xml配置确实比较麻烦,如果想在Spring中使用定时器的话其实是必须使用xml配置文件的。
- 引入task约束
1 |
http://www.springframework.org/schema/task |
- 开启注解
1 |
<task:scheduler id="Scheduler" pool-size="10"/> |
- 以注解的方式使用
在项目中使用时定时任务的类必须由Spring来管理,所以我们给这个类加上一个@Component注解
1 |
@Component |
@Scheduled注解呢,就是表示启用定时任务,括号里的cron的值呢,其实就是一种表达式,就像上边的例子呢就是表示每分钟执行一次。(文章最后会有cron的详细用法介绍哦)
在SpringBoot和SpringCloud中使用定时器
在SpringBoot中使用的话相比较于Spring中就简单明了多了,一起来看一下吧。
引入task
灰常简单,启动类增加一个注解@EnableScheduling完事使用
和Spring的使用方式一样,这里就不多做介绍了。1
2
3
4
5
6
7
8
9
10
11@Component
public class Task { /**
*每分钟执行一次
*/
@Scheduled(cron = "0 0/1 * * * ?")
public void test(){
System.out.println("task定时任务");
}
}
优雅的初始化定时器
有的时候我们的定时任务可能几个小时需要执行一次。但是呢,我们可能会需要一些初始值。(假如说我们需要一些缓存,不想每次查询缓存都去判断的话我们就可以先在项目启动时就查询出来,然后定时刷新)如果把这个值的初始化过程放在类的构造方法中感觉岂不是太low了,那么有没有别的办法呢?
@PostConstruct注解,这个注解呢,可以在Spring加载这个类的时候执行一次,完美的解决我们上方所说的问题
1 |
@Component |
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)
年份(1970-2099)
-区间
*通配符
? 你不想设置那个字段
demo
注意下方*之间有空格
“0 0 1 ? ** ” 每天凌晨1点触发
“0 30 1 ? ** ” 每天凌晨1:30触发
“30 30 1 ? ** ” 每天凌晨1:30:30触发
“30 30 1 ** ? 2018” 2018年的每天凌晨1:30:30触发
“0 0/1 *** ?” 每分钟触发 一次
“0 0 0/1 ** ?” 每小时触发一次
“0 15 10 ? * MON-FRI” 周一到周五的10:15触发
如果觉得会用的到的话可以收藏转载哦!
本文出自http://zhixiang.org.cn,转载请保留。
Java定时任务解决方案的更多相关文章
- 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群
完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群 maven依赖 <dependency> <groupId>org.quartz-scheduler ...
- atititt.java定时任务框架选型Spring Quartz 注解总结
atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...
- java定时任务
java定时任务实现方法: public class TimingTask { private static int count = 0; private static SpiderService s ...
- [转][JAVA]定时任务之-Quartz使用篇
[BAT][JAVA]定时任务之-Quartz使用篇 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与 ...
- Java定时任务器
java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager { //时间间隔 private static final long PERIOD_ ...
- Quartz实现JAVA定时任务的动态配置
什么是动态配置定时任务? 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 定时任务实现方式千人千种,不过基础的无外乎 1.JDK 的Timer类 2. ...
- Java中对比单继承与多继承的优劣,以及java的解决方案
继承是一种面相对象的基本特征之一,但在具体语言的语法设计中有两种方式:单继承和多继承. 所谓多继承是指一个子类可以拥有多个父类:单继承则是一个子类只拥有一个父类. 单继承与多继承的优劣: 多继承优点在 ...
- java——定时任务
java定时任务直接看代码 public void timeTask(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { pu ...
- Java应用多机器部署定时任务解决方案
Java多机部署下定时任务的处理方案. 本文转自:http://www.cnblogs.com/xunianchong/p/6958548.html 需求: 有两台服务器同时部署了同一套代码, 代码中 ...
随机推荐
- C#使用CefSharp开源库开发Chrome 浏览器
一.介绍 这个东西我以前没有接触过,但是公司项目里面有用到这个东西,所以就顺便研究一下.今天只是做了 WinForm 的测试,有时间了在试试 WPF 是如何实现的.刚开始一塌糊涂,有点麻 ...
- Redis master/slave,sentinel,Cluster简单总结
现在互联网项目中大量使用了redis,本文著主要分析下redis 单点,master/slave,sentinel模式.cluster的一些特点. 一.单节点模式 单节点实例还是比较简单的,平时做个测 ...
- Lonsdor K518ISE programs 2005 Ford Focus key in two minutes
A quick demonstration of Lonsdor K518ISE programming key for 2005 Ford Focus in two minutes. And for ...
- jQuery基础方法:each(),map(),index(),is()
jQuery的each()方法和forEach()的区别: each()返回调用自身的jQuery对象,可用于链式调用 $('div').each(function(idx){ //找到所有div元素 ...
- 面试简单整理之web
63.servlet是什么?运行过程? Servlet是一门用于开发动态web资源的技术. 运行过程: Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①W ...
- mysql 数据库导入导出方法总结
一般形式:mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 (1)-p 后面不能加password,只能单独输入如1中那样 (2)mysqldump是在cmd下的命 ...
- SBT实操指南
参考资料:1.英文官方文档2.中文官方文档,内容翻译的不全 SBT是类似maven和gradle的自动构建和包依赖管理工具,SBT是Scala技术体系下的包管理工具,都是Lightbend公司开发的, ...
- Sublime Text 3安装emmet(ZenCoding)
1.安装 Package Ctrol: 使用 ctrl + - 打开控制台,输入以下代码 import urllib.request,os; pf = 'Package Control.sublime ...
- sequence测试中的使用
1. create sequence : create sequence TEST_SEQUENCE minvalue 1 maxvalue 1000000000 start with 1 incre ...
- django的视图函数
一.视图函数view 视图函数是接收一个请求(request对象),并返回响应的函数 1. HttpResponse响应请求 这个方法是返回字符串一类的,可以识别标签 2. render响应请求 re ...