新聞中心
一般對于業(yè)務復雜的流程,會有一些處理邏輯不需要及時返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量時間來處理,就可以通過異步的方式來優(yōu)化。
實現(xiàn)異步的常用方法遠不止兩種,但是個人經驗常用的,好用的,這里我就說兩種,最好用的是第二種。
- spring的注解方式@Async
org.springframework.scheduling.annotation.Async
- jdk1.8后的CompletableFuture
java.util.concurrent.CompletableFuture
其中第一種的使用注意事項比較多
1.不要在本類中異步調用。即一個方法是異步方法,然后用另一個方法調用這個異步方法。
2.不要有返回值,使用void
3.不能使用本類的私有方法或者非接口化加注@Async,因為代理不到失效
4.異步方法不能使用static修飾
5.異步類需使用@Component注解,不然將導致spring無法掃描到異步類
6.SpringBoot框架必須在啟動類中增加@EnableAsync注解
7.異步方法不要和事物注解同時存在。可以在事物的方法中調用另外一個類中的異步方法。在調用Async方法的方法上標注@Transactional是管理調用方法的事務的,在Async方法上標注@Transactional是管理異步方法的事務,事務因線程隔離
@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); } }
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享標題:詳解springboot中使用異步的常用兩種方式及其比較-創(chuàng)新互聯(lián)
網站URL:http://www.dlmjj.cn/article/pphge.html