Java開發人員應該知道的前5個Spring Boot特性
你可能聽說過Spring Boot,它的神奇功能可以建立一個不到140個字元的Spring Web應用程式,但這究竟意味著什麼?這些功能為 Spring Boot 提供瞭如此強大的功能,並使Spring應用程式開發變得如此簡單?那麼,這就是你將在本文中學到的東西。
我們將更詳細地討論Spring Boot的自動配置,入門依賴項,Spring Boot CLI以及Actuator和Spring Initializer功能。這些功能可以消除編寫基於Spring的Java Web應用程式相關的大部分痛苦和摩擦。
但在進入細節之前,讓我們重新審視與基於Spring的Java開發相關的問題。我個人喜歡先看問題,然後在我享受解決方案之前先感受一下。請記住:努力工作後,舒適感會更好。用餐時也一樣; 當你餓的時候,你會享受更多。
Spring是 - 毫無疑問 - 一個很棒的框架,它為你做了很多事情,例如它建立了一個物件,為它們提供了依賴,並且如果Spring不存在,它會帶走你將要編寫的大量程式碼,但是作為回報,它在配置和學習方面也向您提出了很多要求。
在過去,如果你從頭開始一個全新的基於Spring的Java應用程式,你知道它不是小菜一碟。首先需要找到所需的所有依賴項,然後找到它們的相容版本。你還需要配置很多bean來啟用一些Spring魔法。
例如,如果要建立一個 基於Spring MVC的REST應用程式 ,它支援嵌入式Tomcat中的JSON格式,那麼您可以在Maven pom.xml檔案中建立至少8到10個依賴項,例如spring-core.jar, spring-mvc.jar,jackson.jar,embedded-tomcat.jar等,請注意,這是一個非常簡單的設定。
Spring Boot消除了所有這些痛苦,讓你編寫重要的程式碼,即應用程式程式碼。我之前提到的所有Spring Boot功能,例如自動配置,Starter POM或Starter依賴項,以及Spring Boot CLI,旨在簡化Spring的Java開發。
現在,讓我們進一步詳細介紹這些功能。
1.自動配置
您之前可能使用過基於Spring的Java Web應用程式,它連線到關係資料庫,例如像H2這樣的記憶體資料庫,如果是,那麼您可能知道需要將JdbcTemplate宣告為bean並且還需要配置a DataSource,它是JDBC模板的依賴項。
在使用基於Java的配置的現代Spring應用程式中,您需要在Configuration類中新增以下兩個方法:
@Bean <b>public</b> JdbcTemplate jdbcTempalte(DateSource ds){ <b>return</b> <b>new</b> JdbcTempalte(ds); } @Bean <b>public</b> DataSource dataSource(){ <b>return</b> <b>new</b> EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScripts('ddl.sql', 'data.sql') .build(); }
對於之前在Spring有過開發的人來說,這並不是很複雜,但是如果你要重新開始,那麼可能需要數小時和數天才能解決這個問題。
但更重要的是,這是我們許多人編寫的一段程式碼,與我們的應用程式無關。我的意思是,這段程式碼並不是唯一的,每個使用JDBC的Spring應用程式都需要它。
這就是Spring Boot AutoConfiguration 方法的用武之地。它會檢測Classpath中是否存在某個Class,然後自動為您配置它。
例如,如果已將JDBC模板新增到類路徑和H2.jar中,則Spring Boot可以自動為您配置記憶體資料庫和可以使用的JDBC模板。您無需編寫上述程式碼即可在DAO層中使用JDBC模板。
這只是一個例子。Spring Boot自動配置可以做出200多個這樣的決定,並通過檢查JAR依賴關係自動配置許多功能。例如,如果存在spring-mvc.jar,則它可以自動配置 DispatcherServlet, InternalViewResolver 等。
如果存在JPA和Hibernate,那麼它也可以配置它,如果你有spring-security.jar,那麼它甚至可以配置基本安全性來保護你的應用程式。請記住:當涉及到安全方面自動配置時,需要深入的知識才能正確保護您的應用程式。
預設情況下,自動配置功能處於禁用狀態,您需要使用Configuration類@EnableAutoConfiguration 或 @SpringBootApplication 註釋來啟用它 。我通常會註釋Main類,我將使用嵌入式Tomcat伺服器執行它。
建議使用@SpringBootApplication Spring Boot 1.2以後的 註釋,因為它結合了其他一些註釋,使您的程式碼更具可讀性。
簡而言之,Spring Boot的自動配置功能可以節省大量工作並縮短開發時間,我強烈建議您在使用Spring Boot時使用自動配置。
2.入門POM
雖然 AutoConfiguration 消除了配置常見功能的痛苦,但Starter POM通過在專案中查詢和新增公共依賴項來消除引入依賴包的痛苦。為了構建一個簡單的基於Spring MVC的REST應用程式,它支援 Jackson 並將其執行為嵌入式容器,您至少需要以下依賴項:
- spring-core.jar
- spring-web.jar
- spring-webmvc.jar
- jackson-databind.jar
- tomcat-embed-core.jar
- tomcat-embed-el.jar
- tomcat-embed-logging-juil.jar
通過使用Spring Boot Starter POM或入門依賴項功能,您只需在pom.xml中新增spring-boot-starter-web依賴項即可獲得所有這些功能。
因此,您只需新增一個,而不是新增所有這些依賴項並擔心其相容版本。您還將更加自信使用經過試驗和測試的庫版本,並且將來不會出現任何不相容問題。
Start POM功能的另一個細微好處是您不需要記住或搜尋依賴項。如果要構建Web應用程式,可以新增“web”啟動器。如果您正在構建 JPA應用程式 ,則可以通過聚合Spring Boot易於記憶和使用的常見依賴項和功能來新增“JPA”啟動程式。
簡而言之,Starter POM或入門依賴項是Spring Boot的另一個非常棒的功能,它真正有助於簡化Spring應用程式開發。它就像是自動配置的近親,你會經常一起使用它們。
3. Spring Boot CLI
Spring Boot CLI是Spring Boot框架提供的命令列介面,允許您使用Groovy程式語言建立基於Spring的Web應用程式。實際上,Groovy和Spring Boot很好地相互補充。Groovy旨在使Java開發更簡單,而Spring Boot旨在使Spring應用程式開發更簡單,並且彼此的簡單性都受益。
雖然自動配置和入門依賴項是Spring Boot的一個不可或缺的功能,但Spring CLI是一個可選項。您還需要安裝Spring CLI才能使用它。
這是一個簡單的Groovy和Spring Boot CLI中的HelloWorld RESTful Web服務,它可以在不編譯的情況下執行它,如下所示:
@RestController <b>class</b> HelloSpringBootController{ @RequestMapping(<font>"/"</font><font>) def hello() { <b>return</b> </font><font>"Hello Spring Boot CLI"</font><font> } } </font>
您可以在嵌入式容器上執行它,它包含Spring Boot CLI,沒有web.xml,沒有配置,也沒有伺服器設定。
如果您想知道這些事情是如何工作的,例如,Groovy如何瞭解 @RestController 和 @RequestMapping 註釋,那麼讓我告訴您Spring Boot CLI利用自動配置和啟動POM功能讓您專注於只編寫應用程式程式碼。
Spring Boot CLI會檢測 @RestController 並 @RequestMapping 正在使用它,並且它知道需要將哪些啟動器依賴項新增到類路徑中才能使其工作。
一旦下載了這些依賴項系列,自動配置會自動啟動並配置使用,例如一旦spring-boot-web-starter出現在類路徑中,它會下載spring-mvc.jar然後自動配置自動配置 DispatcherServlet 並啟用Spring MVC。
整個事情看起來像魔術,但它實際上很容易做到。如果你喜歡這種開發模式,我建議你通過 Craig Walls的 Spring Boot in Action 來深入學習Spring CLI。克雷格非常瞭解這個話題。
4.Actuator
actuator 是Spring Boot的另一個很棒的功能,它允許檢視正在執行的Spring Boot應用程式中發生的事情。憑藉其自動配置的優點,檢視是否存在不知道的應用程式內部的風險以及Spring Actuator解決風險的風險。
它提供了有關在生產中執行應用程式的大量見解和指標。例如,通過使用 Actuator,您可以確切地找到在Application上下文中配置的bean,自動配置決策是什麼,哪些環境變數,系統屬性,命令列引數可用於應用程式等等。
您甚至可以獲得應用程式處理的HTTP請求以及各種有用的應用程式指標,例如CPU和記憶體使用情況,垃圾收集詳細資訊,Web請求和資料來源使用情況。
Spring Boot Actuator 還提供了幾個端點來檢索這些資料,例如,您可以使用RESTful API獲取所有這些,或者您可以使用其遠端shell功能安全地進入應用程式並通過發出命令獲取所有這些資訊。
它還使用JMX MBean公開所有這些功能,這意味著您可以使用JMX客戶端(如JConsole)在執行時控制它們。
同時,您還需要保護對Actuator 端點的訪問, 因為它不僅暴露機密資訊,而且危險。例如,任何人都可以使用/shutdown 端點來停止您的應用程式 。
雖然,你不必擔心。與任何其他Spring應用程式一樣,您可以使用Spring Security來保護 Actuator 端點。
5. Spring Boot Initializer
Spring Initializer是Spring Boot的另一個特性,它解決了專案結構方面的問題。它是一個Web應用程式,允許您使用Java,Kotlin,Groovy或Spring Boot生成Maven或Gradle專案。
您需要提供的只是GUI中的Project MetaData,例如專案名稱,組,工件等。它還允許您從大型列表中選擇啟動器依賴項,例如Web,JPA或安全啟動器。
可以通過https://start.spring.io/訪問Spring Initializer專案 。 建立專案後,您可以下載Zip檔案,然後開啟到Eclipse或IntelliJ IDEA等IDE。然後,您可以編輯此示例專案以與程式碼一起使用。
根據我的經驗,許多Java和Spring開發人員面臨的一個常見問題是如何啟動專案。他們中的許多人對是否使用您的Java檔案,資原始檔等毫無頭緒。
雖然 Maven ,Gradle, IntelliJ IDEA 和 Eclipse 有助於為您提供基本結構,但您仍然需要精通這兩項技能才能獲得先機,如果您不熟悉Maven或IDE,它可能是一個惡夢。
Spring Boot Initaizer解決了這個問題,並且可以很容易地建立一個基於Spring的Java應用程式,而無需真正瞭解Spring框架的許多內部細節。
這就是Java開發人員應該知道 的Spring Boot的一些功能 。這些功能確實使Java和Spring的工作變得有趣和高效,這就是為什麼越來越多的公司採用Spring Boot for Java開發的原因。