spring-boot触发器使用

在开触发器时,会自动开启一个线程处理任务。不用担心和主程序的阻塞问题,但需注意任务之间的阻塞问题,如果是异步则会为每个任务都开启,无需担心任务之间的阻塞问题。

  1. 在spring-boot启动类上添加@EnableScheduling注解,代表开启定时器,图1。
  2. 单纯只做一个任务且项目启动时就开始或者延时一段时间开始,在需要做任务的类上添加@Component注解,让spring-boot扫码组件,在方法上注解@Scheduled(initialDelay = 1000,fixedDelay = 2000)第一个参数是延迟多久开始,第二个参数是间隔多久执行一次,图2。
  3. 如果有多个任务执行,可能需要开线程执行任务,这时只需在任务类上多加一个@EnableAsync注解和任务方法上@Async即可,图3。
  4. 需要指定时间启动,在任务方法上加@Scheduled(cron = "0,5 6/1 18 10 8 2")即可,再根据需要写cron表达式。其中
    依次是秒 分 时 天 月 星期(1代表星期1,2代表星期2)
    ","代表这个和这个都要执行
    "/“代表左边这个时间开始,每隔”/"右边的数就执行一次,代表通配,什么都执行
    全都为"
    "时,就没过1s执行一次
    这是spring的只有6个域,图4。

图1,启动类添加注解

@EnableScheduling
@SpringBootApplication
public class TimApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(TimApplication.class, args);
    }
}

图2,单个任务,当两个任务同时时,会等待前一个执行完再执行

@Component
public class NoThread {
    
    
    @Scheduled(initialDelay = 1000,fixedDelay = 2000)
    public void pt(){
    
    
        try {
    
    
            Thread.sleep(5000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("我是pt");
    }
    @Scheduled(initialDelay = 1000,fixedDelay = 2000)
    public void pt1(){
    
    
        try {
    
    
            Thread.sleep(5000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("我是pt1");
    }
}

图3,也是两个任务同时进行,但是采用异步,不用等待前一个执行就可执行

@EnableAsync
@Component
public class Threads {
    
    
    @Async
    @Scheduled(initialDelay = 1000,fixedDelay = 2000)
    public void pt(){
    
    
        try {
    
    
            Thread.sleep(5000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("我是pt2");
    }
    @Async
    @Scheduled(initialDelay = 1000,fixedDelay = 2000)
    public void pt1(){
    
    
        try {
    
    
            Thread.sleep(5000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("我是pt3");
    }
}

图4,有定时需求启动时采用,下面的cron代表8月10号周2的下午17点42分0秒和5秒开始输出一次,且开始每过1分钟继续执行

@EnableAsync
@Component
public class cron {
    
    
    //依次是秒 分 时 天 月 星期(1代表星期1,2代表星期2)
    // ","代表这个和这个都要执行
    // "/"代表左边这个时间开始,每隔"/"右边的数就执行一次,*代表通配,什么都执行
    // 全都为"*"时,就没过1s执行一次
    @Scheduled(cron = "0,5 42/1 17 10 8 2")
    @Async
    public void pt4(){
    
    
        System.out.println("我是pt4");
    }
}

猜你喜欢

转载自blog.csdn.net/wflsyf/article/details/119575656
今日推荐