一般對于業(yè)務(wù)復(fù)雜的流程,會有一些處理邏輯不需要及時返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量時間來處理,就可以通過異步的方式來優(yōu)化。
創(chuàng)新互聯(lián)主營王益網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,王益h5小程序設(shè)計搭建,王益網(wǎng)站營銷推廣歡迎王益等地區(qū)企業(yè)咨詢實現(xiàn)異步的常用方法遠(yuǎn)不止兩種,但是個人經(jīng)驗常用的,好用的,這里我就說兩種,最好用的是第二種。
org.springframework.scheduling.annotation.Async
java.util.concurrent.CompletableFuture
其中第一種的使用注意事項比較多
1.不要在本類中異步調(diào)用。即一個方法是異步方法,然后用另一個方法調(diào)用這個異步方法。
2.不要有返回值,使用void
3.不能使用本類的私有方法或者非接口化加注@Async,因為代理不到失效
4.異步方法不能使用static修飾
5.異步類需使用@Component注解,不然將導(dǎo)致spring無法掃描到異步類
6.SpringBoot框架必須在啟動類中增加@EnableAsync注解
7.異步方法不要和事物注解同時存在。可以在事物的方法中調(diào)用另外一個類中的異步方法。在調(diào)用Async方法的方法上標(biāo)注@Transactional是管理調(diào)用方法的事務(wù)的,在Async方法上標(biāo)注@Transactional是管理異步方法的事務(wù),事務(wù)因線程隔離
@Async的使用方式
1.pom引入依賴。只要依賴中存在spring-context包即可。
2.需要在springboot啟動類上加上開啟異步的注解@EnableAsync
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.scheduling.annotation.EnableAsync; @EnableAsync @EnableHystrix @EnableFeignClients @SpringBootApplication public class OrderServerApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(OrderServerApplication.class); } public static void main(String[] args) { SpringApplication.run(OrderServerApplication.class, args); } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。