摘要:耗時毫秒耗時毫秒耗時毫秒添加異步任務控制器測試異步任務控制器。
SpringCloud(第 047 篇)注解式Async配置異步任務
-
一、大致介紹1、有時候我們在處理一些任務的時候,需要開啟線程去異步去處理,原有邏輯繼續往下執行; 2、當遇到這種場景的時候,線程是可以將我們完成,然后在SpringCloud中也有這樣的注解來支撐異步任務處理;二、實現步驟 2.1 添加 maven 引用包
2.2 添加應用配置文件(springms-asyncsrcmainresourcesapplication.yml)4.0.0 springms-async 1.0-SNAPSHOT jar com.springms.cloud springms-spring-cloud 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web
server: port: 8345 spring: application: name: springms-async #全部小寫2.3 添加異步任務類(springms-asyncsrcmainjavacomspringmscloudtaskAsyncTasks.java)
package com.springms.cloud.task; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Random; import java.util.concurrent.Future; /** * Async實現異步調用。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/10/19 * */ @Component public class AsyncTasks { public static Random random = new Random(); @Async public Future2.4 添加異步任務Web控制器(springms-asyncsrcmainjavacomspringmscloudcontrollerAsyncTaskController.java)doTaskOne() throws Exception { System.out.println("Async, taskOne, Start..."); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); System.out.println("Async, taskOne, End, 耗時: " + (end - start) + "毫秒"); return new AsyncResult<>("AsyncTaskOne Finished"); } @Async public Future doTaskTwo() throws Exception { System.out.println("Async, taskTwo, Start"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); System.out.println("Async, taskTwo, End, 耗時: " + (end - start) + "毫秒"); return new AsyncResult<>("AsyncTaskTwo Finished"); } @Async public Future doTaskThree() throws Exception { System.out.println("Async, taskThree, Start"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(5000)); long end = System.currentTimeMillis(); System.out.println("Async, taskThree, End, 耗時: " + (end - start) + "毫秒"); return new AsyncResult<>("AsyncTaskThree Finished"); } }
package com.springms.cloud.controller; import com.springms.cloud.task.AsyncTasks; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.Future; /** * 測試異步任務Web控制器。 * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/10/19 * */ @RestController public class AsyncTaskController { @Autowired AsyncTasks asyncTasks; /** * 測試異步任務。 * * @return * @throws Exception */ @GetMapping("/task") public String task() throws Exception { long start = System.currentTimeMillis(); Future2.5 添加微服務啟動類(springms-schedulesrcmainjavacomspringmscloudMsScheduleApplication.java)task1 = asyncTasks.doTaskOne(); Future task2 = asyncTasks.doTaskTwo(); Future task3 = asyncTasks.doTaskThree(); while(true) { if(task1.isDone() && task2.isDone() && task3.isDone()) { // 三個任務都調用完成,退出循環等待 break; } Thread.sleep(1000); } long end = System.currentTimeMillis(); String result = "任務全部完成,總耗時:" + (end - start) + "毫秒"; return result; } }
package com.springms.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; /** * 注解式Async配置異步任務; * * @author hmilyylimh * * @version 0.0.1 * * @date 2017/10/19 * */ @SpringBootApplication @EnableAsync public class MsAsyncApplication { public static void main(String[] args) { SpringApplication.run(MsAsyncApplication.class, args); System.out.println("【【【【【【 Async異步任務微服務 】】】】】】已啟動."); } }三、測試
/**************************************************************************************** 一、簡單用戶鏈接Mysql數據庫微服務(Async實現異步調用): 1、添加注解 EnableAsync、Async 以及任務類上注解 Component ; 2、啟動 springms-async 模塊服務,啟動1個端口; 3、然后在瀏覽器輸入地址 http://localhost:8345/task 然后等待大約10多秒后,成功打印所有信息,一切正常; 總結:說明 Async 異步任務配置生效了; ****************************************************************************************/四、下載地址
https://gitee.com/ylimhhmily/SpringCloudTutorial.git
SpringCloudTutorial交流QQ群: 235322432
SpringCloudTutorial交流微信群: 微信溝通群二維碼圖片鏈接
歡迎關注,您的肯定是對我最大的支持!!!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67835.html
摘要:當前時間打印當前時間定時任務觸發,操作多個添加數據,事務中任一異常,都可以正常導致數據回滾。當前時間當前時間添加微服務啟動類注解式配置定時任務,不支持任務調度。 SpringCloud(第 046 篇)注解式Schedule配置定時任務,不支持任務調度 - 一、大致介紹 1、很多時候我們需要隔一定的時間去執行某個任務,為了實現這樣的需求通常最普通的方式就是利用多線程來實現; 2、但是有...
摘要:注意注解能注冊到服務上,是因為該注解包含了客戶端的注解,該是一個復合注解。包含了客戶端注解,同時也包含了斷路器模塊注解,還包含了網關模塊。 SpringCloud(第 027 篇)集成異構微服務系統到 SpringCloud 生態圈中(比如集成 nodejs 微服務) - 一、大致介紹 1、在一些稍微復雜點系統中,往往都不是單一代碼寫的服務,而恰恰相反集成了各種語言寫的系統,并且我們還...
摘要:添加任務成功運行任務名稱添加定時任務服務定時任務服務。觸發器計劃列表添加測試任務類測試任務類被任務調度后執行該任務類。聲明一個靜態變量保存添加啟動類簡單微服務,不支持分布式。 SpringCloud(第 009 篇)簡單 Quartz 微服務,不支持分布式 - 一、大致介紹 1、本章節僅僅只是為了測試 Quartz 在微服務中的使用情況; 2、其實若只是簡單的實現任務調用而言的話,Sp...
摘要:加載配置文件失敗加載配置文件失敗添加定時調度任務定時調度任務添加定時調度任務定時調度任務執行的張表入數據庫添加啟動類簡單微服務,采用注解配置分布式集群。 SpringCloud(第 054 篇)簡單 Quartz-Cluster 微服務,采用注解配置 Quartz 分布式集群 - 一、大致介紹 1、因網友提到有沒有采用注解式配置的Quartz例子,因此本人就貼上了這樣一個樣例; 2、至...
閱讀 1633·2021-09-02 15:11
閱讀 1972·2019-08-30 14:04
閱讀 2558·2019-08-27 10:52
閱讀 1574·2019-08-26 11:52
閱讀 1196·2019-08-23 15:26
閱讀 2614·2019-08-23 15:09
閱讀 2603·2019-08-23 12:07
閱讀 2232·2019-08-22 18:41