這篇文章主要介紹在springboot 使用非同步方法,去請求github api.
在pom檔案引入相關依賴:
org.springframework.bootgroupid>
spring-boot-starterartifactid>
dependency>
org.springframeworkgroupid>
spring-webartifactid>
dependency>
com.fasterxml.jackson.coregroupid>
jackson-databindartifactid>
dependency>
建立乙個接收資料的實體:
@jsonignoreproperties(ignoreunknown=true)
public
class
user
public
void
setname(string name)
public string getblog()
public
void
setblog(string blog)
@override
public string tostring()
}
建立乙個請求的 githib的service:
@service
public
class
githublookupservice
@async
public futurefinduser(string user) throws interruptedexception
}
通過,resttemplate去請求,另外加上類@async 表明是乙個非同步任務。
開啟非同步任務:
@enableasync
public
class
extends
asyncconfigurersupport
@override
public executor getasyncexecutor() }
通過@enableasync開啟非同步任務;並且配置asyncconfigurersupport,比如最大的執行緒池為2.
測試**如下:
@component
public
class
implements
commandlinerunner
@override
public
void
run(string... args) throws exception
// print results, including elapsed time
logger.info("elapsed time: " + (system.currenttimemillis() - start));
logger.info("--> " + page1.get());
logger.info("--> " + page2.get());
logger.info("--> " + page3.get());
}}
啟動程式,控制台會列印:
2017-04-30 13:11:10.351 info 1511 — [ githublookup-1] com.forezp.service.githublookupservice : looking up pivotalsoftware耗時:39082017-04-30 13:11:10.351 info 1511 — [ githublookup-2] com.forezp.service.githublookupservice : looking up cloudfoundry
2017-04-30 13:11:13.144 info 1511 — [ githublookup-2] com.forezp.service.githublookupservice : looking up spring-projects
分析:可以卡的前面2個方法分別在githublookup-1 和githublookup-2執行,第三個在githublookup-2執行,注意因為在配置執行緒池的時候最大執行緒為2.如果你把執行緒池的個數為3的時候,耗時減少。
如果去掉@async,你會發現,執行這三個方法都在main執行緒中執行。耗時總結,如下:
2017-04-30 13:13:00.934 info 1527 — [ main] com.forezp.service.githublookupservice : looking up pivotalsoftware耗時:52612017-04-30 13:13:03.571 info 1527 — [ main] com.forezp.service.githublookupservice : looking up cloudfoundry
2017-04-30 13:13:04.865 info 1527 — [ main] com.forezp.service.githublookupservice : looking up spring-projects
通過這乙個小的栗子,你應該對非同步任務有了一定的了解。
SpringBoot非官方教程 終章 文章彙總
springboot非官方教程,可能最接近於官方的乙個教程,大多數案例都來自於官方文件,為了更好的理解,加入了個人的改造。謝謝支援,記得明星哦。springcloud系列教程 springboot非官方教程 第一篇 構建第乙個springboot工程 springboot非官方教程 第二篇 spri...
非官方答覆
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
WinX非官方手冊(一)
對 winx 的一些整理 很久沒有寫 winx 的東西了,開學了,很忙,呵呵,又要準備考研,沒有時間來研究了,而且也沒有做什麼 gui,基本寫的都是 cui的東西,所以到 winx 就放下了。昨天寫了乙個最小二乘法的直線擬使程式,想做成 gui的,以後做實驗的時候用,於是又想起了 winx 鬱悶的是...