springboot使用定时任务、异步

时间:2022-11-24 07:49:25

1、定时任务:纯注解方式

@Configuration
@EnableScheduling
@Component
public class TaskConfig {
   
//  定时任务:每天凌晨3点跑定时
    @Scheduled(cron = "0 0 3 * * ?")
   
public void myTask() {
        System.
out.println("定时任务启动。。。。。。");
   
}
}

2、异步

         1)注解方式开启异步并设置异步线程池参数

@Configuration
@EnableAsync
public class AsyncConfig {
   
/*
   
此处成员变量应该使用@Value从配置中读取
     */
    /** Set the ThreadPoolExecutor's core pool size. */
   
private int corePoolSize = 10;
   
/** Set the ThreadPoolExecutor's maximum pool size. */
   
private int maxPoolSize = 200;
   
/** Set the capacity for the ThreadPoolExecutor's BlockingQueue. */
   
private int queueCapacity = 10;

   
@Bean
   
public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor =
new ThreadPoolTaskExecutor();
       
executor.setCorePoolSize(corePoolSize);
       
executor.setMaxPoolSize(maxPoolSize);
       
executor.setQueueCapacity(queueCapacity);
        
executor.initialize();
        return
executor;
   
}
}

         2)测试异步

@RequestMapping(value = "/api/async")
@RestController
public class AsyncController {

   
@Autowired
   
private AsyncTask asyncTask;

   
@GetMapping(value = "/test")
   
public String testAsync() {
       
/*
            123-->
异步,132-->同步
         */
        System.out.println("1");
       
asyncTask.async();
       
System.out.println("2");
        return
"test";
   
}
}

 

@Component
public class AsyncTask {
   
@Async
   
public void async() {
       
try {
            Thread.sleep(
1000);
       
} catch (InterruptedException e) {
            e.printStackTrace()
;
       
}
        System.
out.println("3");
   
}

}