如今咱們有了一個能夠運行的 SpringBoot 應用程序,讓咱們添加一些簡單的功能。咱們但願在 /api/hola 上公開一個 HTTP/REST 端點,它將返回 「Hola Spring Boot From X」,其中X是服務運行的IP地址。爲此,請到 src/main/java/com/ 目錄示例。若是您遵循前面的步驟,應該已經爲您指定了這個位置;記住,咱們傳遞給 Springinit 程序的 group Id 並無將 group Id 應用到 Java 包層次結構中,咱們已經將其保留爲「com.case」。而後建立一個名爲 HolaRestController 的新Java類,如示例2-1所示。咱們將添加一個名爲 hola() 的方法,該方法返回一個字符串以及服務運行位置的IP地址。在第5章中,在咱們的負載轉換和服務發現部分中,您將看到如何使用主機IP來演示正確的故障轉移、負載平衡等。java
例子 2-1 src/main/java/com/example/HolaRestController.javagit
增長 HTTP Endpointsgithub
此時,這段代碼只是一個POJO(普通的傳統Java對象),您能夠(而且應該)編寫一個單元測試來驗證它的行爲。爲了將其公開爲 REST 服務,咱們將在示例2-2中使用如下注釋:spring
@RestController
這是一個HTTP控制器,可以公開HTTP端點(GET、PUT、POST等)。數據庫
@RequestMapping
將HTTPURI路徑的特定部分映射到Java代碼中的類、方法和參數。api
注意,IMPORT語句被省略瀏覽器
Example 2-2. src/main/java/com/example/HolaRestController.javaspringboot
在這段代碼中,咱們所作的就是添加前面提到的註釋。例如,類級別的@RequestMap(「/api」)表示「映射此根URI路徑下的任何方法級HTTP端點。」當咱們添加@RequestMap(Method=RequestMethod.GET,value=「/hola」,Products=「text/plain」)時,咱們告訴Spring在/hola(其實是/api/hola)公開一個HTTP GET 端點,並將媒體類型爲Accept:text/Plain 的請求映射到此方法。SpringBoot默認使用嵌入的Tomcat servlet 容器,可是能夠切換到其餘選項,好比 Undertow 或 Jetty 。app
若是咱們構建應用程序並再次運行 Spring-start:Run,咱們應該可以到達咱們的HTTP端點:框架
$ mvn clean package spring-boot:run
如今,若是咱們將瀏覽器指向http://localhost:8080/api/hola,咱們應該看到相似於如下內容的響應:
若是咱們想嚮應用程序中添加一些環境感知的配置,該怎麼辦?例如,若是咱們將咱們的應用程序部署到用戶的產品中,而不是說「hola」,也許咱們想說「guten tag」?咱們須要一種方法將屬性注入到咱們的應用程序中。
Spring Boot使使用外部屬性源(如屬性文件、命令行參數、OS環境或Java系統屬性)變得容易。咱們甚至能夠將整個屬性「類」綁定到Spring上下文中的對象。例如,若是我想將全部helloapp.*屬性綁定到HolaRestController,我能夠添加@ConfigurationProperties(前綴=「helloapp」),SpringBoot將自動嘗試將helloapp.foo和helloapp.bar綁定到HolaRestController類中的JavaBean屬性。讓咱們在src/main/Resources/applice.properties 中定義一個名爲 helloapp.say 的新屬性。properties文件是在建立項目時自動爲咱們建立的。注意,咱們能夠將文件名更改成 application.yml,Spring仍然會將其識別爲YAML文件做爲屬性的來源。
讓咱們向src/main/Resources/application.properties文件添加一個新屬性:
helloapp.saying=Guten Tag aus
在示例2-3中的HolaRestController中,讓咱們添加@ConfiguRationalProperties註釋和新的Say字段。注意,咱們還須要setter和getter。
Example 2-3. src/main/java/com/example/HolaRestController.java
讓咱們先中止應用程序的運行(若是尚未),而後從新啓動它:
$ mvn clean package spring-boot:run
如今,若是咱們導航到http://localhost:8080/api/hola,咱們將看到諺語的德文版本:
咱們如今能夠外部化屬性,這取決於咱們運行的環境。服務URI、數據庫URI和密碼以及消息隊列配置都是外部配置的最佳選擇。可是,不要作得太過火;並非全部事情都須要根據運行環境的不一樣而改變!理想狀況下,應用程序在全部環境中的配置徹底相同,包括超時、線程池、重試閾值等。
若是咱們想把這種微型服務投入生產,咱們將如何監測它?咱們怎樣才能洞察到事情是如何進行的呢?除非咱們明確考慮如何向外部世界公開度量,不然咱們的微服務一般是黑匣子。spring boot 提供了一個預先包裝好的起動器稱爲執行器,這使作這件事變得垂手可得。
讓咱們看看須要什麼來啓用執行器。爲您的hola-Spring微服務打開app.xml文件,並在<dependencies>...</dependencies>部分中添加如下 Maven 依賴項:
如今,經過中止並運行您的微服務,從新啓動它:
$ mvn clean package spring-boot:run
經過添加執行器依賴項,咱們的應用程序如今已經公開了大量信息,這些信息對於調試或通常的微服務洞察很是方便。嘗試訪問如下URL並檢查返回的內容:
• http://localhost:8080/beans
• http://localhost:8080/env
• http://localhost:8080/health
• http://localhost:8080/metrics
• http://localhost:8080/trace
• http://localhost:8080/mappings
下面是http://localhost:8080/env端點的一個示例。看起來是這樣的:
這樣公開運行時洞察力能夠幫助開發人員集中精力爲交付業務價值的微服務編寫代碼。將任務委託給框架來完成繁重的任務和樣板工做絕對是個好主意。
到目前爲止,咱們一直在從開發人員的筆記本電腦使用 Maven 的角度考慮開發和構建hello-world微服務。可是,若是您向其餘人提供的微服務,仍是在實際環境(開發、QA、生產)中運行它?
幸運的是,有了SpringBoot,只須要幾個步驟就能夠爲發佈和生產作好準備。SpringBoot 更喜歡原子的、可執行的JAR,將全部依賴項打包到一個扁平的類路徑中。這意味着咱們做爲調用mvn clean package 打包建立的JAR是可執行的,而且包含了在Java環境中運行咱們的微服務所需的全部內容!要對此進行測試,請轉到hola-Spring微服務項目的根目錄,並運行如下命令:
$ mvn clean package $ java -jar target/hola-springboot-1.0.jar
若是您的項目名爲DEMO,而不是hola-Spring啓動,那麼請替換正確命名的JAR文件(DEMO-1.0.jar)。
當咱們探索DropWizard和WildFly Swar時,咱們會注意到這種語法習慣
原文:
做者源碼:https://github.com/redhat-developer/microservices-by-example-source