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,也是两个任务同时进⾏,但是采⽤异步,不⽤等待前⼀个执⾏就可执⾏
springboot是啥@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");
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论