java 定时处理_Java定时任务解决方案

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

在Spring中使用定时器

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

引入task约束

1

2

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.0.xsd

开启注解

1

2

以注解的方式使用

在项目中使用时定时任务的类必须由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中就简单明了多了,一起来看一下吧。

引入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

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触发

如果觉得会用的到的话可以收藏转载哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值