java开发中如何使用定时任务

2024-01-09 22:20:40

定时任务概述:

任务调度:

是指系统为了自动完成特定任务,在约定的特定时刻执行任务的过程。有了任务调度,即可解放更多的人力,而是由系统自动去执行任务。

常用业务场景案例:
  • 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。
  • 某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
  • 某财务系统需要在每天凌晨0:10结算前一天的财务数据,统计汇总。
  • 12306会根据车次的不同,设置某几个时间点进行分批放票。
如何实现任务调度?
  • 多线程方式,结合sleep

  • JDK提供的API,例如:Timer、ScheduledExecutor

  • 框架,例如Quartz ,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求

  • spring task

?cron表达书:
  • cron表达式是一个字符串,用来设置定时规则,由7个部分组成,每部分中间用空格隔开。
7个部分的含义:

??

组成部分含义取值范围
第一部分Seconds (秒)0-59
第二部分Minutes(分)0-59
第三部分Hours(时)0-23
第四部分Day-of-Month(天)1月31日
第五部分Month(月)0-11或JAN-DEC
第六部分Day-of-Week(星期)1-7(1表示星期日)或SUN-SAT
第七部分Year(年) 可选1970-2099

cron表达式也可以设置一些特殊符号,更加灵活的设置定时规则。

符号含义
?表示不确定的值。当两个子表达式其中一个被指定了值以后,为了避免冲突,需要将另外一个的值设为“?”。例如:想在每月20日触发调度,不管20号是星期几,只能用如下写法:0 0 0 20 * ?,其中最后以为只能用“?”
*代表所有可能的值
,设置多个值,例如”26,29,33”表示在26分,29分和33分各自运行一次任务
-设置取值范围,例如”5-20”,表示从5分到20分钟每分钟运行一次任务
/设置频率或间隔,如"1/15"表示从1分开始,每隔15分钟运行一次任务
L用于每月,或每周,表示每月的最后一天,或每个月的最后星期几,例如"6L"表示"每月的最后一个星期五"
W表示离给定日期最近的工作日,例如"15W"放在每月(day-of-month)上表示"离本月15日最近的工作日"
#表示该月第几个周X。例如”6#3”表示该月第3个周五
举例子:

*/5 * * * * ?? ? ? ? 每隔5秒运行一次

0 0 11?* * ?? ? ? ? 每天11点运行一次

0 0 1 6?* ?? ? ? ? 每月6号凌晨1点执行一次

0 0 23 L* ?? ? ? ? 每月最后一天23点运行一次

0 28,32,47 * * * ?在 28分,32分,33分运行一次

0 0/30 9-17 * * ?? ? ?朝九晚五工作时间内,每半小时运行一次任务

0 15 10 ? * 6#3? ? ? 每月的第三个星期五上午,10:15运行一次任务

Spring Task入门案例:

1). 导入maven坐标 spring-context 目前项目中只要导入了springboot相关依赖会自动导入,这一步无需操作

2).自定义定时任务类

定义一个定时任务类:

在com.sde包下:新建一个job包,里面新建一个MyTaskOne任务类

@Slf4j
@Component
public class MyTaskOne {
    
}

?编写一个测试方法,每隔5秒执行一次。

代码:

@Slf4j
@Component
public class MyTaskOne {
    
    @DisplayName(value = "每隔5秒执行一次")
    @Scheduled(cron = "0/5 * * * * ?")
    void test1(){
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
    }
}

记得要在我们的spring boot 启动类上,加一个注解:@EnableScheduling

 
@SpringBootApplication
@EnableScheduling
public class ZzylApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZzylApplication.class, args);
	}
}

效果:

文章来源:https://blog.csdn.net/weixin_64502989/article/details/135488265
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。