A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2017heima 初级黑马   /  2017-12-10 21:13  /  2659 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 2017heima 于 2017-12-10 21:16 编辑

springboot配置定时任务
一.java中的常用定时任务种类
1.Timer类是java自带的java.util包下的一个类,这个类允许你调度一个TimerTask任务。使用这种方式虽然可以让你的程序按照某一个频度执行,但不能在指定时间运行。
2.Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂
3.Scheduled是SpringBoot自带的,我们可以将它看成一个轻量级的Quartz,并且使用起来更简单也是springboot带给我们的优势之一
二.定时任务执行方式
1.串行(单线程)
2.并行(多线程)
三.使用步骤
1.在springboot服务的启动类上添加注解@EnableScheduling 这个注解表示在springboot中打开定时任务开关
2.创建定时任务类
@Component
public class CronStartService {
/**
* 没一分钟执行一次
*/
@Scheduled(fixedDelay = 60000)
public void updateUnPayExpire() {
System.out.println("我是需要定期执行的代码!");
}
}
PS:@Scheduled(fixedDelay = 60000)该注解是设置定时任务的执行计划时间,具体的参数设置如下以上这是表示单线程下执行的定时任务,如果要想在多线程条件下执行则需要添加一个线程设置
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(4));
}
}
可以根据自己的业务需要来设置适合自己的线程池来达到在多线程条件下执行定时任务,如果不设置则默认是在单线程条件下执行定时任务
四.cron表达式详解
1.Cron表达式是一个字符串,是由空格隔开的6或7个域组成,每一个域对应一个含义(秒 分 时 每月第几天 月 星期 年)其中年是可选字段。
0 0/30 8-10 * * * 表示每天8点到10点,每半小时执行
秒:可出现", - * /"四个字符,有效范围为0-59的整数
分:可出现", - * /"四个字符,有效范围为0-59的整数
时:可出现", - * /"四个字符,有效范围为0-23的整数
每月第几天:可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
月:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
星期:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
2.各个符号代表的意义和使用情况
* : 表示匹配该域的任意值,如在秒用*, 则表示每秒都会执行
? : 只能用在每月第几天和星期两个域。表示不指定值,当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子
表达式的值设为“?”;
- : 表示范围,例如在分域使用5-20,表示从5分到20分钟每分钟都会执行一次
/ : 表示从指定起始时间开始执行,然后每隔固定时间执行一次,例如在分域使用10/10,则意味着10分,20分,30分,40分,50分,分别执行一次.
, : 表示列出枚举值。例如:在分域使用10,40,则意味着在10和40分时执行一次。
L : 表示最后,只能出现在星期和每月第几天域,如果在星期域使用1L,意味着在最后的一个星期日执行。
W : 表示有效工作日(周一到周五),只能出现在每月第几日域,系统将在离指定日期的最近的有效工作日执行。注意一点,W的最近寻找不会跨过月份
LW : 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马