很多项目中都会遇到需要定时任务的情况,本篇文章就结合了Spring中以及SpringBoot、SpringCloud中定时任务的解决方案。

在Spring中使用定时器

用SpringBoot比较多的同学可能都会觉得Spring的xml配置确实比较麻烦,如果想在Spring中使用定时器的话其实是必须使用xml配置文件的。

  1. 引入task约束
1
2
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd
  1. 开启注解
1
2
<task:scheduler id="Scheduler" pool-size="10"/> 
<task:annotation-driven scheduler="Scheduler" proxy-target-class="true"/>
  1. 以注解的方式使用

在项目中使用时定时任务的类必须由Spring来管理,所以我们给这个类加上一个@Component注解

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定时任务");
}
}

@Scheduled注解呢,就是表示启用定时任务,括号里的cron的值呢,其实就是一种表达式,就像上边的例子呢就是表示每分钟执行一次。(文章最后会有cron的详细用法介绍哦)

在SpringBoot和SpringCloud中使用定时器

在SpringBoot中使用的话相比较于Spring中就简单明了多了,一起来看一下吧。

  1. 引入task
    灰常简单,启动类增加一个注解@EnableScheduling完事

  2. 使用
    和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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Component
public class Task { private int num; private Random rand = new Random(); /**
*每分钟执行一次
*/
@Scheduled(cron = "0 0/1 * * * ?")
public void test(){
System.out.println("task定时任务");
}
@PostConstruct
private void init(){
changeNum();
} private void changeNum(){
//假装这是个查询数据库的操作
num=rand.nextInt(100);
}
}

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定时任务解决方案的更多相关文章

  1. 完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群

    完整的定时任务解决方案Spring集成+定时任务本身管理+DB持久化+集群 maven依赖 <dependency> <groupId>org.quartz-scheduler ...

  2. atititt.java定时任务框架选型Spring Quartz 注解总结

    atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz  (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...

  3. java定时任务

    java定时任务实现方法: public class TimingTask { private static int count = 0; private static SpiderService s ...

  4. [转][JAVA]定时任务之-Quartz使用篇

    [BAT][JAVA]定时任务之-Quartz使用篇 定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与 ...

  5. Java定时任务器

    java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager { //时间间隔 private static final long PERIOD_ ...

  6. Quartz实现JAVA定时任务的动态配置

    什么是动态配置定时任务? 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 定时任务实现方式千人千种,不过基础的无外乎 1.JDK 的Timer类 2. ...

  7. Java中对比单继承与多继承的优劣,以及java的解决方案

    继承是一种面相对象的基本特征之一,但在具体语言的语法设计中有两种方式:单继承和多继承. 所谓多继承是指一个子类可以拥有多个父类:单继承则是一个子类只拥有一个父类. 单继承与多继承的优劣: 多继承优点在 ...

  8. java——定时任务

    java定时任务直接看代码 public void timeTask(){ Timer timer = new Timer(); timer.schedule(new TimerTask() { pu ...

  9. Java应用多机器部署定时任务解决方案

    Java多机部署下定时任务的处理方案. 本文转自:http://www.cnblogs.com/xunianchong/p/6958548.html 需求: 有两台服务器同时部署了同一套代码, 代码中 ...

随机推荐

  1. AutoMapper 忽略某个字段

    以前要在定义中忽略 Mapper.CreateMap<Source, Destination>() .ForMember(dest => dest.SomeValuefff, opt ...

  2. 一篇文章说清楚mysql索引

    索引是什么? 索引是为了加速对表中数据行的检索而创建的一种分散的数据存储结构 为什么要使用索引? 索引能极大的减少数据存储引擎需要需要扫描的数据量: 索引能够把随机IO变为数序IO: 索引能够帮助我们 ...

  3. .NET framework访问Oracle的几种方法

    首先介绍下开发环境:WIn10 64bit+Visual Studio 2015+Oracle10ClientWin32(只是客户端,如果安装整个数据库也是可以的) 目前了解C#中连接Oracle数据 ...

  4. Python 的经典设计格言,格言来源于 Python 但不限于 Python

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

  5. Intellij IDEA环境配置RestEasy,SpringMVC+RestEasy

    在SpringMvc中配置RestEasy,需要以下步骤 1.通过maven导入restEasy所需要的jar包 2.在web.xml文件中添加相应的配置. 3.编写服务. 具体步骤: 1.通过mav ...

  6. windows kafka 环境搭建踩坑记

    版本介绍(64位): Windows 10 JDK1.8.0_171 zookeeper-3.4.8/ kafka_2.11-0.10.0.1.tgz 点击链接进行下载 1. JDK安装和环境搭建 自 ...

  7. C++动态库的几点认识

    1.动态库也有lib文件,称为导入库,一般大小只有几k: 2.动态库有静态调用和动态调用两种方式: 静态调用:使用.h和.lib文件 动态调用: 先LoadLibrary,再GetProcAddres ...

  8. <c:forEach>循环列表,获取勾选的checkbox中某个<td>的值

    <table> <!--列表表头 开始 --> <tr> <th><input type="checkbox" name=&q ...

  9. Node.js创建本地简易服务器

    创建简易的本地服务器 安装node.js 在项目下,通过npm init -y创建package.json文件 通过npm install mime --save加载mime插件 创建server.j ...

  10. bzoj3110(整体二分)

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...