很多项目中都会遇到需要定时任务的情况,本篇文章就结合了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. statrc部分

    statrc部分 1. 如何使用 #- 在app中编写 stark.py #- 在stark.py中进行定制 #- 默认配置: #site.register(models.UserInfo) #- 自 ...

  2. DynamoDB

    https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html Creating a  New  Table I ...

  3. 增加cookie和表单提交的安全

    设置COOKIE setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path ...

  4. 分割list,将集合按规定个数分为n个部分。

    /** * 按指定大小,分隔集合,将集合按规定个数分为n个部分 * * @param list * @param len * @return */ public static <T> Li ...

  5. Spring in Action 第一章 Spring之旅

    1.1 简化Java开发 1.1.2 依赖注入(DI) 松耦合:如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能在对象本身毫不知情的情况下,用不同的具体实现进行替代 ...

  6. debian proftpd安装

  7. 通过maven-assembly-plugin将Springboot项目打包成tar.gz压缩包,在Linux环境可执行脚本直接安装成系统服务

    1.在pom.xml中添加maven-assembly-plugin依赖,同时需将默认生成的spring-boot-maven-plugin依赖删除,否则最终打出的发行包启动会有问题 <plug ...

  8. asp.net上传图片到服务器

    ASP.NET的FileUpload控件可用于上传文件到服务器.HoverTreeTop新增了一个“阅图”功能,图片就是用FileUpload上传的.阅图功能查看:http://hovertree.c ...

  9. js实现一个简单的登录页面

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 在linux上添加硬盘

    首先呢我们需要添加一个硬盘,如下所示: 接着我们需要新建一个硬盘 代码如下: mkdir /bak fdisk -l 接着我们继续第二步,分区 代码如下: fdisk /dev/sdb n   add ...