zoukankan      html  css  js  c++  java
  • Springboot集成定时调度

    1、利用定时调度可以帮助用户实现无人值守程序执行,在Spring中提供了简单的SpringTask调度执行任务,利用此组件可以实现间隔调度与CRON调度处理。

    首先需要创建一个线程调度类,如下所示:

     1 package com.demo.cron;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 import org.springframework.scheduling.annotation.Scheduled;
     7 import org.springframework.stereotype.Component;
     8 
     9 /**
    10  * 
    11  * @author
    12  *
    13  */
    14 @Component
    15 public class CronSchedulerTask {
    16 
    17     /**
    18      * 定义一个要执行的任务
    19      */
    20     @Scheduled(fixedRate = 2000) // 采用间隔调度,每隔2秒执行一次
    21     public void runJobA() {
    22         System.err.println("【*** runJobA ***】 " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
    23     }
    24 
    25     /**
    26      * 定义一个要执行的任务
    27      */
    28     @Scheduled(cron = "* * * * * ?") // 采用间隔调度,每隔1秒执行一次
    29     public void runJobB() {
    30         System.err.println("【*** runJobB ***】 " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
    31     }
    32 
    33 }

    为了让多个任务并行执行,还需要建立一个定时调度池的配置类,如下所示;

     1 package com.demo.config;
     2 
     3 import java.util.concurrent.Executors;
     4 
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.scheduling.annotation.SchedulingConfigurer;
     7 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
     8 
     9 /**
    10  * 定时调度的配置类一定要实现指定的父接口
    11  * 
    12  * @author
    13  *
    14  */
    15 @Configuration
    16 public class SchedulerConfig implements SchedulingConfigurer {
    17 
    18     /**
    19      * 开启线程调度池
    20      */
    21     @Override
    22     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    23         // 10个线程池
    24         taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    25     }
    26 
    27 }

    切记,要在程序启动类上追加定时任务配置注解,如下所示:

     1 package com.demo;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
     6 import org.springframework.scheduling.annotation.EnableScheduling;
     7 import org.springframework.transaction.annotation.EnableTransactionManagement;
     8 
     9 @SpringBootApplication // 启动Springboot程序,而后自带子包扫描
    10 @EnableScheduling // 启动调度
    11 public class DemoApplication {
    12 
    13     public static void main(String[] args) {
    14         // 启动Springboot程序
    15         SpringApplication.run(DemoApplication.class, args);
    16     }
    17 
    18 }

    运行效果,如下所示:

  • 相关阅读:
    1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布
    JS。 问题类型:穷举,迭代。两个关键词:break和continue
    for循环计算游戏通关分数
    36抽8 模拟抽奖
    冒泡排序
    折纸---珠穆朗玛问题----简单for 循环
    水仙花数------"水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。(for循环的嵌套)
    九九乘法表---for循环的嵌套
    百鸡百钱===百马百担====for循环嵌套
    控制台输入年龄,根据年龄输出不同的提示 ------if……else if ……else 语句
  • 原文地址:https://www.cnblogs.com/biehongli/p/14003824.html
Copyright © 2011-2022 走看看