• springboot---任务---整合quartz与task----定时任务(详细)


    目录

    一、整合quartz

    maven坐标

    代码

    二、整合task

    第一步 开启定时任务的开关

    第二步  在任务的上面写注解@Scheduled

    定时任务的配置


    普通定时器任务

    1. public class TimerTaskApp {
    2. public static void main(String[] args) {
    3. Timer timer = new Timer();
    4. TimerTask timerTask = new TimerTask() {
    5. @Override
    6. public void run() {
    7. System.out.println("66666666");
    8. }
    9. };
    10. timer.schedule(timerTask,0,3000);
    11. }
    12. }

    一、整合quartz

       可以将下图看做四步

    maven坐标

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-quartz</artifactId>
    4. </dependency>

    代码

    1. public class MyQuartz extends org.springframework.scheduling.quartz.QuartzJobBean {
    2. // 因为QuartzJobBean类是一个抽象类,所以这里我们要实现抽象方法
    3. /**
    4. * 定义具体要执行的任务
    5. * @param jobExecutionContext
    6. * @throws JobExecutionException
    7. */
    8. @Override
    9. protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    10. System.out.println("运行了运行了6666");
    11. }
    12. }
    1. @Configuration
    2. public class QuartzConfig {
    3. /**
    4. * 绑定具体的工作
    5. * @return
    6. */
    7. @Bean
    8. public JobDetail printJobDetail(){ //JobDetail这是一个接口
    9. // 创建MyQuartz.class类对应的工作,就会运行MyQuartz.class类中的executeInternal方法
    10. // storeDurably() 持久化存起来,一定要加上
    11. return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    12. }
    13. /**
    14. * 绑定具体的工作明细
    15. * 触发器
    16. * @return
    17. */
    18. @Bean
    19. public Trigger printJobTrigger(){
    20. // 设置一个定时器
    21. ScheduleBuilder scheduleBuilder =CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
    22. // 使用forJob将触发器和具体的工作绑在一起 withSchedule执行周期
    23. return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
    24. }
    25. }

    上面的代码虽然可以实现,但是比较的麻烦,因为有一个工作的话,就需要一个JobDetail

    针对上述的麻烦,我们可以看下面的 整合Task

    二、整合task

    第一步 开启定时任务的开关

    1. @SpringBootApplication
    2. @EnableScheduling //开启定时任务功能
    3. public class
    4. Springboot23TaskApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(Springboot23TaskApplication.class, args);
    7. }
    8. }

    第二步  在任务的上面写注解@Scheduled

    1. @Component //定义成bean
    2. public class MyBean {
    3. @Scheduled(cron = "0/1 * * * * ?")
    4. public void print(){
    5. System.out.println("spring task run.....");
    6. }
    7. }

    我们可以对比上面的两种使用方式,发现下面的这种代码更简洁,效率会更快,尽量掌握下面这种形式的

    定时任务的配置

  • 相关阅读:
    手把手带你上手swagger3
    07 CSS04
    ICLR24大模型提示(1/11) | BadChain:大型语言模型的后门思维链提示
    Lambda 表达式怎么用?
    华为 VLAN实验
    Nginx学习笔记11——防盗链与http的referer
    奥比中光3D视觉AI开放平台焕新上线,建设AI算力+算法+数据全链路
    SpringCloud-Sentinel
    2020 icpc 昆明 B. Chessboard 有源汇有上下界最小费用可行流 强制满流
    <Linux>进程控制
  • 原文地址:https://blog.csdn.net/weixin_51351637/article/details/125493351