SpringBoot定时任务实现的两种方式介绍

举报
IT技术分享社区 发表于 2022/11/25 21:04:27 2022/11/25
【摘要】 今天给大家介绍SpringBoot定时任务实现的几种方式,希望对大家能有所帮助! 1、SpringTask 用法框架介绍:SpringTask是Spring自带的轻量级定时任务工具,相比于Quartz使用更加简单方便,并且不需要不需要引入其他依赖即可使用。今天主要介绍注解的实现方式: SpringBoot启动类配置 @EnableScheduling 注解package my.springb...

image_46f3436d.png

今天给大家介绍SpringBoot定时任务实现的几种方式,希望对大家能有所帮助!

1、SpringTask 用法

框架介绍:SpringTask是Spring自带的轻量级定时任务工具,相比于Quartz使用更加简单方便,并且不需要不需要引入其他依赖即可使用。今天主要介绍注解的实现方式:

SpringBoot启动类配置 @EnableScheduling 注解

package my.springboot.task;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;


@SpringBootApplication
@EnableScheduling 
public class TaskApplication {


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


}

创建测试类 TaskTest.java

package my.springboot.task.controller;


import cn.hutool.core.date.DateUtil;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


import java.util.Date;
@Component
public class TaskTest {
//每隔20秒执行一次
@Scheduled(cron = "0/20 * * * * ?")
public void Test()
    {
        System.out.println("执行测试"+ DateUtil.now());
    }
}

然后启动项目就可以了,运行效果如下:

image_12430677.png

2、Quartz用法 介绍

添加依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

添加测试类 QuartzJobTest.java

package my.springboot.mybatis.controller;


import cn.hutool.core.date.DateUtil;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;


public class QuartzJobTest extends QuartzJobBean {
@Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String userName = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("userName");
        String type = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("type");
        System.out.println("测试类型:"+type+",你好,"+userName+",当前执行时间为:"+ DateUtil.now());
    }
}

添加配置类 QuartzConfig.java

package my.springboot.mybatis.common;


import my.springboot.mybatis.controller.QuartzJobTest;
import my.springboot.mybatis.controller.TaskTest;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class QuartzConfig {




@Bean
    public JobDetail testJobDetail() {
        JobDetail jobDetail= JobBuilder.newJob(QuartzJobTest.class)
                .usingJobData("type","Trigger")
                .usingJobData("userName", "小明") //设置参数(键值对)
                .storeDurably()
                .build();
return jobDetail;
    }
/**
     * 定时任务1:
     * Trigger触发器使用
     */
    @Bean
    public Trigger testJobTrigger() {
//每隔5秒执行一次
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/15 * * * * ?");
//创建触发器
        Trigger trigger = TriggerBuilder.newTrigger()
                .forJob(testJobDetail())//关联上述的JobDetail
                .withSchedule(cronScheduleBuilder)
                .build();
return trigger;
    }


@Bean
    public JobDetail testSampleJobDetail() {
        JobDetail jobDetail= JobBuilder.newJob(QuartzJobTest.class)
                .usingJobData("type","SimpleTrigger")
                .usingJobData("userName", "小王")               .storeDurably() 
                .build();
return jobDetail;
    }


/**
     * 定时任务2:
     * Simple触发器使用
     * */
    @Bean
    public SimpleTrigger testSimpleTrigger(){
        SimpleScheduleBuilder ssb = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10).repeatForever();
        SimpleTrigger sTrigger = TriggerBuilder.newTrigger()
                .forJob(testSampleJobDetail())//
                .withSchedule(ssb).build();
return sTrigger;
    }




}

运行效果

image_caf2c12d.png

3、常用Cron表达式

0 0 13,16,17 * * ?” 每天下午147点执行一次
“0 0 10 ? * WED” 表示每周三中午10点执行一次
“0 0 10 * * ?” 每天中午10点执行一次
“0 15 13 * * ?” 每天下午1:15执行一次
“0 15 10 * * ? " 每天上午10:15执行一次
“0 30 10 * * ? 20212021年的每天上午10:30执行一次
“0 10 9 ? * MON-FRI” 周一至周五的上午9:10执行一次
“0 15 10 15 * ?” 每月15日上午10:15执行一次
“0 15 10 L * ?” 每月最后一日的上午10:15执行一次
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15执行一次
"/5 * * * * ?” 每隔5秒执行一次
“0 */1 * * * ?” 每隔1分钟执行一次
“0 0 23 * * ?” 每天23点执行一次
“0 0 1 * * ?” 每天凌晨1点执行一次
“0 0 1 1 * ?” 每月1号凌晨1点执行一次
“0 0 23 L * ?” 每月最后一天23点执行一次
“0 0 1 ? * L” 每周星期天凌晨1点实行一次
“0 26,29,33 * * * ?” 在26分、29分、33分执行一次
“0 0 0,13,18,21 * * ?” 每天的0点、13点、18点、21点都执行一次
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。