国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Java微服務(wù)開發(fā)指南 -- 使用Spring Boot構(gòu)建微服務(wù)

Java微服務(wù)開發(fā)指南 -- 使用Spring Boot構(gòu)建微服務(wù)

時(shí)間:2022-08-11 16:15:01 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2022-08-11 16:15:01 來源:網(wǎng)站運(yùn)營

使用Spring Boot構(gòu)建微服務(wù)

Spring Boot是一個(gè)廣泛用來構(gòu)建Java微服務(wù)的框架,它基于Spring依賴注入框架來進(jìn)行工作。Spring Boot允許開發(fā)人員使用更少的配置來構(gòu)建微服務(wù),同時(shí)框架本身能夠盡可能的減少開發(fā)人員的沖突,它和我們后面要介紹的兩個(gè)框架類似,它通過以下幾個(gè)方面幫助開發(fā)人員:

簡化的配置

Spring以噩夢般的配置而聞名,雖然框架本身相比其他組件模型(EJB 1.x 和 2.x)簡單了不少,但是它也帶來了自己的配置模式。也就是說,如果想要正確的使用Spring,你需要深入了解如何進(jìn)行XML配置、了解JdbcTemplate、JmsTemplate以及BeanFactory生命周期、了解Servlet監(jiān)聽器,你以為掌握了這些就可以開始開發(fā)了嗎?實(shí)際上問題遠(yuǎn)沒有結(jié)束,如果你要用Spring MVC編寫一個(gè)簡單的hello world,你還需要了解DispatcherServlet和一堆Model-View-Controller相關(guān)的類型。

Spring Boot目標(biāo)就是消除掉這些與業(yè)務(wù)無關(guān)的配置和概念,通過簡單的注解,你就能夠完成這些工作,當(dāng)然如果你想繼續(xù)想以前一樣使用Spring,它也不會(huì)攔著你。

Starter依賴

Spring廣泛使用著,包括了大型企業(yè)應(yīng)用,在應(yīng)用中,用戶將會(huì)使用到不同的技術(shù)組件,包括:JDBC數(shù)據(jù)源、消息隊(duì)列、文件系統(tǒng)以及應(yīng)用緩存等。開發(fā)人員需要在需要這些功能時(shí),停下來,仔細(xì)分析一下自己究竟需要什么?需要的內(nèi)容屬于哪個(gè)依賴(“哦,我需要JPA依賴”),然后花費(fèi)大量的時(shí)間在依賴組織和排除上。

Spring Boot提供了功能域(一批jar包依賴)的依賴,它讓開發(fā)人員聲明需要的功能,而不用去關(guān)系究竟如何處理依賴關(guān)系。這些starter可以允許開發(fā)人員直接使用這些功能:

通過直接添加一個(gè)starter,能夠讓開發(fā)人員獲得這個(gè)特性相關(guān)的一組依賴,而這些依賴的組合已經(jīng)被驗(yàn)證,省卻了開發(fā)人員的不少時(shí)間。

應(yīng)用打包

Spring Boot是一組jar包和符合其約定的配置的構(gòu)建塊,因此它不會(huì)運(yùn)行在現(xiàn)有的應(yīng)用服務(wù)器中,而使用Spring Boot的大多數(shù)開發(fā)人員更喜歡的是直接運(yùn)行的這種自包含的jar包。這意味著Spring Boot將所有的依賴和應(yīng)用程序代碼都包裝到一個(gè)自包含的jar中,而這些jar包運(yùn)行在一個(gè)平面的類加載器中。簡單的類加載體系使得開發(fā)人員更容易理解應(yīng)用程序的啟動(dòng)、依賴關(guān)系和日志輸出,但更重要的是,它有助于減少應(yīng)用從構(gòu)建到生產(chǎn)環(huán)境的步驟數(shù)量。這意味著開發(fā)人員不必將打包好的應(yīng)用放置到應(yīng)用服務(wù)器中,而是直接運(yùn)行這個(gè)standalone的應(yīng)用,如果你需要servlet,那么完全可以將其打包在應(yīng)用內(nèi),使其為你服務(wù)。

沒錯(cuò),一個(gè)簡單的java -jar <name.jar>就可以啟動(dòng)你的應(yīng)用了!Spring Boot、Dropwizard和WildFly Swarm都遵循將所有內(nèi)容打包成可執(zhí)行的jar模式。但是傳統(tǒng)的應(yīng)用服務(wù)器包含的管理能力,怎么在這種模式下實(shí)現(xiàn)呢?

為生產(chǎn)環(huán)境而準(zhǔn)備

Spring Boot推出了一個(gè)叫做actuator的模塊,它可以實(shí)現(xiàn)應(yīng)用的指標(biāo)統(tǒng)計(jì)。例如:我們可以收集日志、查看指標(biāo)、生成執(zhí)行線程dump、顯示環(huán)境變量、了解gc以及顯示BeanFactory中配置的bean??梢酝ㄟ^HTTP或者JMX暴露這些信息或者進(jìn)行日志輸出。借助Spring Boot,我們可以利用Spring框架的功能、減少配置并快速開發(fā)應(yīng)用并上線。

說了這么多,讓我們看看怎么使用它。

開始使用

我們接下來使用Spring Boot的命令行工具(CLI)來創(chuàng)建第一個(gè)Spring Boot程序(CLI底層使用了Spring Initializer)。你也可以使用自己喜歡的方式,比如使用集成了Spring Initializer的IDE,或者直接訪問web來創(chuàng)建一個(gè)工程。

Spring Boot CLI 的安裝方式,可以參考 這里
Homebrew下:
brew tap pivotal/tap brew install springboot
一旦你安裝了Spring Boot CLI,你可以這樣檢查一下。

如果你能看到版本的輸出,恭喜你,安裝成功了。接下來,在你希望創(chuàng)建工程的目錄下運(yùn)行命令:spring init --build maven --groupId com.murdock.examples --version 1.0 --java-version 1.8 --dependencies web --name hola-springboot hola-springboot

在microservices-camp下運(yùn)行。
運(yùn)行該命令后,將會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)hola-springboot目錄,同時(shí)該目錄下包含了一個(gè)完整的Spring Boot程序,簡單的介紹一下這個(gè)命令中包含的內(nèi)容。

進(jìn)入到hola-springboot目錄中, 執(zhí)行命令:mvn spring-boot:run,如果程序啟動(dòng),沒有報(bào)錯(cuò),你就能看到如下的日志:

恭喜你!你快速的創(chuàng)建了一個(gè)Spring Boot應(yīng)用,并且啟動(dòng)了它,你甚至可以訪問http://localhost:8080,你會(huì)看到如下內(nèi)容







可以看到返回了默認(rèn)的出錯(cuò)頁面,到目前為止,它除了這個(gè)什么也做不了。接下來,我們就添加一些特性,比如:REST訪問,做一個(gè)helloworld式的應(yīng)用。

后續(xù)實(shí)踐內(nèi)容與原文有不同,在操作性上要比原文具備更好的實(shí)踐性。

你好,世界

現(xiàn)在我們擁有了一個(gè)可以運(yùn)行的Spring Boot應(yīng)用,讓我們?yōu)樗砑右恍┖唵蔚墓δ?。首先,我們想做的是,讓?yīng)用暴露一個(gè)位置是api/holaV1HTTP/REST端點(diǎn),訪問它將返回 Hola Spring Boot @ X,而其中的 X 是運(yùn)行應(yīng)用的本機(jī)IP。

在編寫代碼前,先將hola-springboot導(dǎo)入到IDE中,在com.murdock.examples.holaspringboot包下面建立一個(gè)類,名稱為HolaRestControllerV1。

可以看到方法hola()返回了我們需要的內(nèi)容,一個(gè)簡單的字符串。

添加HTTP端點(diǎn)

到現(xiàn)在為止,我們只是創(chuàng)建了一個(gè)名為HolaRestControllerV1POJO,你可以寫一些單元測試去做驗(yàn)證,而讓它暴露HTTP端點(diǎn),則需要增加一些內(nèi)容。




通過添加這兩個(gè)注解,我們就可以使得原有的類具備了暴露HTTP端點(diǎn)的能力。針對上面的代碼,比如@RequestMapping("/api")代表著HolaRestControllerV1接受來自/api路徑的請求,當(dāng)添加@RequestMapping(method = RequestMethod.GET, value = "/holaV1", produces = "text/plain")時(shí),表示告知Spring在/holaV1(其實(shí)是/api/holaV1)暴露HTTP GET端點(diǎn),該端點(diǎn)接受的類型是text/plain。Spring Boot將會(huì)使用內(nèi)置的Tomcat運(yùn)行,當(dāng)然你也可以切換到Jetty或者Undertow。

我們在hola-springboot目錄下,執(zhí)行mvn clean package spring-boot:run,然后使用瀏覽器訪問http://localhost:8080/api/holaV1,如果一切正常,我們可以看到如下內(nèi)容。










現(xiàn)在這些返回內(nèi)容是寫死的,如果我們想個(gè)應(yīng)用增加一些環(huán)境相關(guān)的配置,如何做呢?比如:可以替代 Hola 這個(gè)詞,比如使用 Guten Tag 德語,我們把這個(gè)應(yīng)用部署給德國人用,我們需要一個(gè)將外部屬性注入給應(yīng)用的途徑。

外部配置

Spring Boot可以很容易使用諸如:properties文件、命令行參數(shù)和系統(tǒng)環(huán)境變量等作為外部的配置來源。我們甚至可以將這些配置屬性通過Spring Context綁定到類型實(shí)例上,例如:如果想將helloapp.*屬性綁定到HolaRestController,可以在類型上聲明@ConfigurationProperties(prefix="helloapp"),Spring Boot會(huì)自動(dòng)嘗試將比如helloapp.foo或者helloapp.bar等這些屬性值綁定到類型實(shí)例的foobar等字段上。

在Spring Initializer CLI創(chuàng)建的工程中,已經(jīng)有了一個(gè)application.properties,我們就可以在這個(gè)文件中定義新屬性,比如:helloapp.saying。

創(chuàng)建一個(gè)新的控制器HolaRestControllerV2。

停止之前運(yùn)行的應(yīng)用,然后在hola-springboot目錄下,繼續(xù)使用mvn clean package spring-boot:run來編譯工程,運(yùn)行這個(gè)應(yīng)用,然后使用瀏覽器訪問http://localhost:8080/api/holaV2,你會(huì)看到如下內(nèi)容。







我們現(xiàn)在通過更改外部配置文件來使應(yīng)用適應(yīng)部署的環(huán)境,比如:調(diào)用服務(wù)的url、數(shù)據(jù)庫url和密碼以及消息隊(duì)列配置,這些都適合作為配置。但是也要把握度,不是所有的內(nèi)容都適合放置在配置中,比如:應(yīng)用在任何環(huán)境下都應(yīng)該具備相同的超時(shí)、線程池、重試等配置。

暴露應(yīng)用的Metrics和信息

一個(gè)Spring Boot應(yīng)用搭建起來了,緊接著就是將其部署到生產(chǎn)環(huán)境,我們怎樣監(jiān)控它呢?當(dāng)我們想知道它運(yùn)行的怎么樣,我們該怎么辦呢?除非我們讓應(yīng)用向外暴露出Metrics,否則應(yīng)用就會(huì)像黑盒子一樣。Spring Boot專門提供了一個(gè)starter --actuator來完成這個(gè)工作。

讓我們看看如何啟用actuator,啟用的過程非常簡單。在hola-springboot/pom.xml中依賴:

然后在hola-springboot/src/main/resources/application.properties中增加一個(gè)配置(安全原因):

隨后,結(jié)束當(dāng)前應(yīng)用,在hola-springboot下運(yùn)行:mvn clean package spring-boot:run重新編譯工程,啟動(dòng)項(xiàng)目。

我們可以通過瀏覽器訪問幾次http://localhost:8080/api/holaV1以及http://localhost:8080/api/holaV2,然后訪問一下:http://localhost:8080/metrics,可以看到如下內(nèi)容。










類似這樣的URL還有許多:

暴露出這些運(yùn)行時(shí)信息,使得開發(fā)人員在忙于業(yè)務(wù)開發(fā)的同時(shí),更輕松獲取到系統(tǒng)信息。

怎樣在maven之外運(yùn)行

到現(xiàn)在為止,我們還是以開發(fā)者視角使用maven來構(gòu)建這個(gè)簡單的工程。如果我們需要將它部署到其他環(huán)境,比如:開發(fā)、測試或者生產(chǎn)環(huán)境,需要怎么做呢?

幸運(yùn)的是,使用Spring Boot,我們可以輕松的發(fā)布和構(gòu)建,Spring Boot推薦單一、可執(zhí)行的jar,而在這個(gè)jar中包括了所有的依賴,這些依賴的jar都會(huì)放置在應(yīng)用的類路徑下。在hola-springboot下,運(yùn)行mvn clean package,然后可以通過java -jar來運(yùn)行。

就是這樣,我們可以啟動(dòng)這個(gè)應(yīng)用,后續(xù)接下來介紹的DropwizardWildFly Swarm都使用類似的方式進(jìn)行。

調(diào)用其他服務(wù)

在微服務(wù)環(huán)境下,每個(gè)服務(wù)都有提供功能的義務(wù)并服務(wù)好它的調(diào)用者。就像我們在第一章中談的,因?yàn)榫W(wǎng)絡(luò)的不確定性,構(gòu)建分布式系統(tǒng)十分的困難,本章主要討論一個(gè)服務(wù)怎樣調(diào)用到后臺(tái)的服務(wù)。

在第五章中,將會(huì)討論服務(wù)的柔性、適應(yīng)性交互和調(diào)用
接下來將擴(kuò)展hola-springboot項(xiàng)目,完成服務(wù)的調(diào)用,但在此之前,我們先要搭建一個(gè)后臺(tái)服務(wù),完成類似下圖的交互。










后臺(tái)服務(wù)的構(gòu)建,將采用forge + WildFly的方式進(jìn)行,比原文中寫一個(gè)Servlet部署到Jetty顯得更好
關(guān)于forge的安裝,在mac下:brew install jboss-forge
通過以下方式,可以在microservices-camp下創(chuàng)建一個(gè)具備持久化能力的REST服務(wù),它可以自由的部署到WildFly中。

使用forge構(gòu)建完成之后,可以將其導(dǎo)入到IDE中,如果觀察BookEndpoint這個(gè)類型,你會(huì)發(fā)現(xiàn)涉及到CRUD以及分頁查詢等邏輯已經(jīng)完全具備了。










通過上述命令,我們可以構(gòu)建出一個(gè)hola-backend.war的應(yīng)用,下面我們將其部署到WildFly中。WildFly的使用可以通過下載到本地運(yùn)行,但是由于涉及到兩個(gè)進(jìn)程的交互,本文采用Docker的方式進(jìn)行部署,讀者可以自行準(zhǔn)備環(huán)境。

筆者準(zhǔn)備了WildFly鏡像,可以簡單的運(yùn)行起來
執(zhí)行:sudo docker run --name wildfly -it -p 9990:9990 -p 8080:8080 weipeng2k/wildfly-admin,可以啟動(dòng)一個(gè)WildFly,HTTP端口在8080,應(yīng)用管理端口在9990
管理員賬號(hào)筆者已經(jīng)構(gòu)建在鏡像中:admin/Admin#hello1234
登錄到WildFly后臺(tái),通過管理界面,部署hola-backend.war。







可以看到后臺(tái)的更新日志,從中可以了解到應(yīng)用部署正常。




使用這種方式的好處在于開發(fā)階段如果有新的包生成直接進(jìn)行上傳就好,如果想整體銷毀,直接停止刪除容器即可,不會(huì)弄壞WildFly。下面使用chrome插件Postman構(gòu)建Book數(shù)據(jù),然后測試是否可用。

新增數(shù)據(jù)測試。







查詢數(shù)據(jù)測試。










看來后臺(tái)服務(wù)應(yīng)用hola-backend工作正常,當(dāng)然可以通過WildFly的管理界面查詢運(yùn)行時(shí)信息,這點(diǎn)和Spring Boot的actuator很像,但是產(chǎn)品化的體驗(yàn)做的更好些。

接下來在hola-springboot項(xiàng)目中新建BookRestController,使用RestTemplate來完成后端服務(wù)的交互。

可以看到BookRestController將后端的host與port放在了配置中,而前綴是books,那么也就需要在application.properties中增加這些配置。

接下來,打開瀏覽器訪問:http://localhost:8080/api/books/1,它將訪問hola-springboot,而hola-springboot將會(huì)調(diào)用hola-backend,最終由hola-springboot輸出結(jié)果。







小結(jié)

通過本章的內(nèi)容,我們學(xué)習(xí)了Spring Boot的基本知識(shí),了解它與傳統(tǒng)的WAREAR不同的部署方式,以及如何使用外部資源來完成配置,并通過actuator暴露了Metrics,使用RestTemplate調(diào)用了另一個(gè)服務(wù)。如果你想了解跟多內(nèi)容,可以參考下面的鏈接。




原文鏈接

更多技術(shù)干貨敬請關(guān)注云棲社區(qū)本站機(jī)構(gòu)號(hào):阿里云云棲社區(qū) - 本站

關(guān)鍵詞:微服,使用,發(fā)指

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉