整理這篇文章是為了給大家分享兩個(gè)springboot
的異步任務(wù)、定時(shí)任務(wù)的簡(jiǎn)單案例,讓大家有個(gè)參考對(duì)象。
異步任務(wù)簡(jiǎn)單案例
在我們開(kāi)發(fā)項(xiàng)目時(shí),常常會(huì)用到異步處理任務(wù),比如我們?cè)诰W(wǎng)站上發(fā)送郵件,后臺(tái)會(huì)去發(fā)送郵件,此時(shí)會(huì)造成前臺(tái)響應(yīng)不動(dòng),直到郵件發(fā)送完畢,響應(yīng)才會(huì)成功,所以我們一般會(huì)采用多線(xiàn)程的方式去處理這些任務(wù)。
- 新建一個(gè)
service
包
- 創(chuàng)建
AsyncService
類(lèi)
@Service
public class AsyncService {
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("業(yè)務(wù)進(jìn)行中~~");
}
}
- 創(chuàng)建
controller
包
- 在
controller
包下創(chuàng)建一個(gè)AsyncController
類(lèi)
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
@GetMapping("/hello")
public String hello(){//調(diào)用方法后會(huì)延遲3秒在頁(yè)面顯示Success
asyncService.hello();
return "success";
}
}
此時(shí)訪(fǎng)問(wèn)Localhost:8080/hello
的情況是:延遲3秒后,在頁(yè)面輸出Success
,在后臺(tái)會(huì)輸出業(yè)務(wù)進(jìn)行中~~
新問(wèn)題:如果想頁(yè)面直接輸出信息“Success”
,而讓這個(gè)hello
方法直接在后臺(tái)用多線(xiàn)程操作,就需要加上@Async注解,這樣spring boot
就會(huì)自己開(kāi)一個(gè)線(xiàn)程池進(jìn)行調(diào)用
改進(jìn):給AsyncService
加上注解
@Async//告訴Spring這是一個(gè)異步方法
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("業(yè)務(wù)進(jìn)行中~~");
}
但是要讓這個(gè)注解起作用,還需要在入口文件中開(kāi)啟異步注解功能
@EnableAsync //開(kāi)啟異步注解功能
@SpringBootApplication
public class SpringbootTaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTaskApplication.class, args);
}
}
此時(shí)再次測(cè)試,發(fā)現(xiàn)頁(yè)面直接輸出了Success
,但是后臺(tái)仍然是3秒后輸出業(yè)務(wù)進(jìn)行中
定時(shí)任務(wù)簡(jiǎn)單案例
工作中常常要設(shè)置一些定時(shí)任務(wù),比如每天在某個(gè)時(shí)間分析一遍日志
所以Spring提供了異步執(zhí)行任務(wù)調(diào)度的方式,提供了兩個(gè)接口。
TaskExecutor
接口
TaskScheduler
接口
兩個(gè)注解:
? @EnableScheduling
? @Scheduled
創(chuàng)建一個(gè)ScheduleService
,里面編寫(xiě)一個(gè)hello
方法,讓它定時(shí)執(zhí)行
@Service
publicclassScheduledService{
//秒分時(shí)日月周幾
@Scheduled(cron="0 * * * * ?")
//這里需要學(xué)習(xí)一些cron表達(dá)式的語(yǔ)法,明白時(shí)間如何設(shè)置,這里的意思是每當(dāng)時(shí)間到0秒時(shí)就執(zhí)行一次
publicvoidhello(){
System.out.println("hello/////");
}
}
要使用定時(shí)功能,還需要在入口文件中加上@EnableScheduling,表明開(kāi)啟定時(shí)任務(wù)功能
@SpringBootApplication
@EnableScheduling//開(kāi)啟定時(shí)任務(wù)注解功能
@EnableAsync//開(kāi)啟異步注解功能
publicclassSpringbootTaskApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(SpringbootTaskApplication.class,args);
}
}
此時(shí)測(cè)試運(yùn)行,發(fā)現(xiàn)每當(dāng)時(shí)間為0秒時(shí)就會(huì)在后臺(tái)打印出 hello////
以上就是分享的兩個(gè)簡(jiǎn)單案例,對(duì)SpringBoot
和java
有學(xué)習(xí)興趣的同學(xué),可以看一下教程
Java教程:http://m.hgci.cn/java/
Java微課:http://m.hgci.cn/minicourse/play/javaminicourse
SpringBoot教程:http://m.hgci.cn/seansblog/
SpringBoot從入門(mén)到精通微課:http://m.hgci.cn/minicourse/play/springboot_my