javascript
使用 Spring Boot 快速构建 Spring 框架应用--转
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/
Spring 框架對于很多 Java 開發(fā)人員來說都不陌生。自從 2002 年發(fā)布以來,Spring 框架已經(jīng)成為企業(yè)應(yīng)用開發(fā)領(lǐng)域非常流行的基礎(chǔ)框架。有大量的企業(yè)應(yīng)用基于 Spring 框架來開發(fā)。Spring 框架包含幾十個(gè)不同的子項(xiàng)目,涵蓋應(yīng)用開發(fā)的不同方面。如此多的子項(xiàng)目和組件,一方面方便了開發(fā)人員的使用,另外一個(gè)方面也帶來了使用方面的問題。每個(gè)子項(xiàng)目都有一定的學(xué)習(xí)曲線。開發(fā)人員需要了解這些子項(xiàng)目和組件的具體細(xì)節(jié),才能知道如何把這些子項(xiàng)目整合起來形成一個(gè)完整的解決方案。在如何使用這些組件上,并沒有相關(guān)的最佳實(shí)踐提供指導(dǎo)。對于新接觸 Spring 框架的開發(fā)人員來說,并不知道如何更好的使用這些組件。Spring 框架的另外一個(gè)常見問題是要快速創(chuàng)建一個(gè)可以運(yùn)行的應(yīng)用比較麻煩。Spring Boot 是 Spring 框架的一個(gè)新的子項(xiàng)目,用于創(chuàng)建 Spring 4.0 項(xiàng)目。它的開發(fā)始于 2013 年。2014 年 4 月發(fā)布 1.0.0 版本。它可以自動(dòng)配置 Spring 的各種組件,并不依賴代碼生成和 XML 配置文件。Spring Boot 也提供了對于常見場景的推薦組件配置。Spring Boot 可以大大提升使用 Spring 框架時(shí)的開發(fā)效率。本文將對 Spring Boot 進(jìn)行詳細(xì)的介紹。
簡介
從 Spring Boot 項(xiàng)目名稱中的 Boot 可以看出來,Spring Boot 的作用在于創(chuàng)建和啟動(dòng)新的基于 Spring 框架的項(xiàng)目。它的目的是幫助開發(fā)人員很容易的創(chuàng)建出獨(dú)立運(yùn)行和產(chǎn)品級別的基于 Spring 框架的應(yīng)用。Spring Boot 會選擇最適合的 Spring 子項(xiàng)目和第三方開源庫進(jìn)行整合。大部分 Spring Boot 應(yīng)用只需要非常少的配置就可以快速運(yùn)行起來。
Spring Boot 包含的特性如下:
- 創(chuàng)建可以獨(dú)立運(yùn)行的 Spring 應(yīng)用。
- 直接嵌入 Tomcat 或 Jetty 服務(wù)器,不需要部署 WAR 文件。
- 提供推薦的基礎(chǔ) POM 文件來簡化 Apache Maven 配置。
- 盡可能的根據(jù)項(xiàng)目依賴來自動(dòng)配置 Spring 框架。
- 提供可以直接在生產(chǎn)環(huán)境中使用的功能,如性能指標(biāo)、應(yīng)用信息和應(yīng)用健康檢查。
- 沒有代碼生成,也沒有 XML 配置文件。
通過 Spring Boot,創(chuàng)建新的 Spring 應(yīng)用變得非常容易,而且創(chuàng)建出的 Spring 應(yīng)用符合通用的最佳實(shí)踐。只需要簡單的幾個(gè)步驟就可以創(chuàng)建出一個(gè) Web 應(yīng)用。下面介紹使用 Maven 作為構(gòu)建工具創(chuàng)建的 Spring Boot 應(yīng)用。代碼清單 1?給出了該應(yīng)用的 POM 文件。
清單 1. Spring Boot 示例應(yīng)用的 POM 文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.midgetontoes</groupId> <artifactId>spring-boot-simple</artifactId> <version>1.0-SNAPSHOT</version> <properties><spring.boot.version>1.1.4.RELEASE</spring.boot.version> </properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.boot.version}</version></dependency> </dependencies> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.boot.version}</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins> </build> </project>從代碼清單 1?中的 POM 文件中可以看到,應(yīng)用所聲明的依賴很少,只有一個(gè)“org.springframework.boot:spring-boot-starter-web”,而不是像其他 Spring 項(xiàng)目一樣需要聲明很多的依賴。當(dāng)使用 Maven 命令“mvn dependency:tree”來查看項(xiàng)目實(shí)際的依賴時(shí),會發(fā)現(xiàn)其中包含了 Spring MVC 框架、SLF4J、Jackson、Hibernate Validator 和 Tomcat 等依賴。這實(shí)際上 Spring 推薦的 Web 應(yīng)用中使用的開源庫的組合。代碼清單 2?中給出了示例應(yīng)用的 Java 代碼。
清單 2. Spring Boot 示例應(yīng)用的 Java 代碼
@RestController @EnableAutoConfiguration public class Application {@RequestMapping("/")String home() {return "Hello World!";}public static void main(String[] args) throws Exception {SpringApplication.run(Application.class, args);} }代碼清單 2?中的 Java 類 Application 是一個(gè)簡單的可以獨(dú)立運(yùn)行的 Web 應(yīng)用。直接運(yùn)行該 Java 類會啟動(dòng)一個(gè)內(nèi)嵌的 Tomcat 服務(wù)器運(yùn)行在 8080 端口。訪問“http://localhost:8080”可以看到頁面上顯示“Hello World!”。也就是說,只需要簡單的 2 個(gè)文件就可以啟動(dòng)一個(gè)獨(dú)立運(yùn)行的 Web 應(yīng)用。并不需要額外安裝 Tomcat 這樣的應(yīng)用服務(wù)器,也不需要打包成 WAR 文件。可以通過“mvn spring-boot:run”在命令行啟動(dòng)該應(yīng)用。在代碼清單 1中的 POM 文件中添加了“org.springframework.boot:spring-boot-maven-plugin”插件。在添加了該插件之后,當(dāng)運(yùn)行“mvn package”進(jìn)行打包時(shí),會打包成一個(gè)可以直接運(yùn)行的 JAR 文件,使用“java -jar”命令就可以直接運(yùn)行。這在很大程度上簡化了應(yīng)用的部署,只需要安裝了 JRE 就可以運(yùn)行。
代碼清單 2?中的“@EnableAutoConfiguration”注解的作用在于讓 Spring Boot 根據(jù)應(yīng)用所聲明的依賴來對 Spring 框架進(jìn)行自動(dòng)配置,這就減少了開發(fā)人員的工作量。注解“@RestController”和”@RequestMapping”由 Spring MVC 提供,用來創(chuàng)建 REST 服務(wù)。這兩個(gè)注解和 Spring Boot 本身并沒有關(guān)系。
Spring Boot 推薦的基礎(chǔ) POM 文件
上一節(jié)的代碼清單 1?中給出的“org.springframework.boot:spring-boot-starter-web”是 Spring Boot 所提供的推薦的基礎(chǔ) POM 文件之一,用來提供創(chuàng)建基于 Spring MVC 的 Web 應(yīng)用所需的第三方庫依賴。除了這個(gè) POM 文件之外,Spring Boot 還提供了其他類似的 POM 文件。所有這些基礎(chǔ) POM 依賴都在“org.springframework.boot”組中。一些重要 POM 文件的具體說明見表 1。
表 1. Spring Boot 推薦的基礎(chǔ) POM 文件
| spring-boot-starter | 核心 POM,包含自動(dòng)配置支持、日志庫和對 YAML 配置文件的支持。 |
| spring-boot-starter-amqp | 通過 spring-rabbit 支持 AMQP。 |
| spring-boot-starter-aop | 包含 spring-aop 和 AspectJ 來支持面向切面編程(AOP)。 |
| spring-boot-starter-batch | 支持 Spring Batch,包含 HSQLDB。 |
| spring-boot-starter-data-jpa | 包含 spring-data-jpa、spring-orm 和 Hibernate 來支持 JPA。 |
| spring-boot-starter-data-mongodb | 包含 spring-data-mongodb 來支持 MongoDB。 |
| spring-boot-starter-data-rest | 通過 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 倉庫。 |
| spring-boot-starter-jdbc | 支持使用 JDBC 訪問數(shù)據(jù)庫。 |
| spring-boot-starter-security | 包含 spring-security。 |
| spring-boot-starter-test | 包含常用的測試所需的依賴,如 JUnit、Hamcrest、Mockito 和 spring-test 等。 |
| spring-boot-starter-velocity | 支持使用 Velocity 作為模板引擎。 |
| spring-boot-starter-web | 支持 Web 應(yīng)用開發(fā),包含 Tomcat 和 spring-mvc。 |
| spring-boot-starter-websocket | 支持使用 Tomcat 開發(fā) WebSocket 應(yīng)用。 |
| spring-boot-starter-ws | 支持 Spring Web Services。 |
| spring-boot-starter-actuator | 添加適用于生產(chǎn)環(huán)境的功能,如性能指標(biāo)和監(jiān)測等功能。 |
| spring-boot-starter-remote-shell | 添加遠(yuǎn)程 SSH 支持。 |
| spring-boot-starter-jetty | 使用 Jetty 而不是默認(rèn)的 Tomcat 作為應(yīng)用服務(wù)器。 |
| spring-boot-starter-log4j | 添加 Log4j 的支持。 |
| spring-boot-starter-logging | 使用 Spring Boot 默認(rèn)的日志框架 Logback。 |
| spring-boot-starter-tomcat | 使用 Spring Boot 默認(rèn)的 Tomcat 作為應(yīng)用服務(wù)器。 |
所有這些 POM 依賴的好處在于為開發(fā) Spring 應(yīng)用提供了一個(gè)良好的基礎(chǔ)。Spring Boot 所選擇的第三方庫是經(jīng)過考慮的,是比較適合產(chǎn)品開發(fā)的選擇。但是 Spring Boot 也提供了不同的選項(xiàng),比如日志框架可以用 Logback 或 Log4j,應(yīng)用服務(wù)器可以用 Tomcat 或 Jetty。
自動(dòng)配置
Spring Boot 對于開發(fā)人員最大的好處在于可以對 Spring 應(yīng)用進(jìn)行自動(dòng)配置。Spring Boot 會根據(jù)應(yīng)用中聲明的第三方依賴來自動(dòng)配置 Spring 框架,而不需要進(jìn)行顯式的聲明。比如當(dāng)聲明了對 HSQLDB 的依賴時(shí),Spring Boot 會自動(dòng)配置成使用 HSQLDB 進(jìn)行數(shù)據(jù)庫操作。
Spring Boot 推薦采用基于 Java 注解的配置方式,而不是傳統(tǒng)的 XML。只需要在主配置 Java 類上添加“@EnableAutoConfiguration”注解就可以啟用自動(dòng)配置。Spring Boot 的自動(dòng)配置功能是沒有侵入性的,只是作為一種基本的默認(rèn)實(shí)現(xiàn)。開發(fā)人員可以通過定義其他 bean 來替代自動(dòng)配置所提供的功能。比如當(dāng)應(yīng)用中定義了自己的數(shù)據(jù)源 bean 時(shí),自動(dòng)配置所提供的 HSQLDB 就不會生效。這給予了開發(fā)人員很大的靈活性。既可以快速的創(chuàng)建一個(gè)可以立即運(yùn)行的原型應(yīng)用,又可以不斷的修改和調(diào)整以適應(yīng)應(yīng)用開發(fā)在不同階段的需要??赡茉趹?yīng)用最開始的時(shí)候,嵌入式的內(nèi)存數(shù)據(jù)庫(如 HSQLDB)就足夠了,在后期則需要換成 MySQL 等數(shù)據(jù)庫。Spring Boot 使得這樣的切換變得很簡單。
外部化的配置
在應(yīng)用中管理配置并不是一個(gè)容易的任務(wù),尤其是在應(yīng)用需要部署到多個(gè)環(huán)境中時(shí)。通常會需要為每個(gè)環(huán)境提供一個(gè)對應(yīng)的屬性文件,用來配置各自的數(shù)據(jù)庫連接信息、服務(wù)器信息和第三方服務(wù)賬號等。通常的應(yīng)用部署會包含開發(fā)、測試和生產(chǎn)等若干個(gè)環(huán)境。不同的環(huán)境之間的配置存在覆蓋關(guān)系。測試環(huán)境中的配置會覆蓋開發(fā)環(huán)境,而生產(chǎn)環(huán)境中的配置會覆蓋測試環(huán)境。Spring 框架本身提供了多種的方式來管理配置屬性文件。Spring 3.1 之前可以使用 PropertyPlaceholderConfigurer。Spring 3.1 引入了新的環(huán)境(Environment)和概要信息(Profile)API,是一種更加靈活的處理不同環(huán)境和配置文件的方式。不過 Spring 這些配置管理方式的問題在于選擇太多,讓開發(fā)人員無所適從。Spring Boot 提供了一種統(tǒng)一的方式來管理應(yīng)用的配置,允許開發(fā)人員使用屬性文件、YAML 文件、環(huán)境變量和命令行參數(shù)來定義優(yōu)先級不同的配置值。
Spring Boot 所提供的配置優(yōu)先級順序比較復(fù)雜。按照優(yōu)先級從高到低的順序,具體的列表如下所示。
Spring Boot 的這個(gè)配置優(yōu)先級看似復(fù)雜,其實(shí)是很合理的。比如命令行參數(shù)的優(yōu)先級被設(shè)置為最高。這樣的好處是可以在測試或生產(chǎn)環(huán)境中快速地修改配置參數(shù)值,而不需要重新打包和部署應(yīng)用。
SpringApplication 類默認(rèn)會把以“--”開頭的命令行參數(shù)轉(zhuǎn)化成應(yīng)用中可以使用的配置參數(shù),如 “--name=Alex” 會設(shè)置配置參數(shù) “name” 的值為 “Alex”。如果不需要這個(gè)功能,可以通過 “SpringApplication.setAddCommandLineProperties(false)” 禁用解析命令行參數(shù)。
RandomValuePropertySource 可以用來生成測試所需要的各種不同類型的隨機(jī)值,從而免去了在代碼中生成的麻煩。RandomValuePropertySource 可以生成數(shù)字和字符串。數(shù)字的類型包含 int 和 long,可以限定數(shù)字的大小范圍。以“random.”作為前綴的配置屬性名稱由 RandomValuePropertySource 來生成,如代碼清單 3?所示。
清單 3. 使用 RandomValuePropertySource 生成的配置屬性
user.id=${random.value} user.count=${random.int} user.max=${random.long} user.number=${random.int(100)} user.range=${random.int[100, 1000]}屬性文件
屬性文件是最常見的管理配置屬性的方式。Spring Boot 提供的 SpringApplication 類會搜索并加載 application.properties 文件來獲取配置屬性值。SpringApplication 類會在下面位置搜索該文件。
- 當(dāng)前目錄的“/config”子目錄。
- 當(dāng)前目錄。
- classpath 中的“/config”包。
- classpath
上面的順序也表示了該位置上包含的屬性文件的優(yōu)先級。優(yōu)先級按照從高到低的順序排列。可以通過“spring.config.name”配置屬性來指定不同的屬性文件名稱。也可以通過“spring.config.location”來添加額外的屬性文件的搜索路徑。如果應(yīng)用中包含多個(gè) profile,可以為每個(gè) profile 定義各自的屬性文件,按照“application-{profile}”來命名。
對于配置屬性,可以在代碼中通過“@Value”來使用,如代碼清單 4?所示。
清單 4. 通過“@Value”來使用配置屬性
@RestController @EnableAutoConfiguration public class Application {@Value("${name}")private String name;@RequestMapping("/")String home() {return String.format("Hello %s!", name);} }在代碼清單 4?中,變量 name 的值來自配置屬性中的“name”屬性。
YAML
相對于屬性文件來說,YAML 是一個(gè)更好的配置文件格式。YAML 在 Ruby on Rails 中得到了很好的應(yīng)用。SpringApplication 類也提供了對 YAML 配置文件的支持,只需要添加對 SnakeYAML 的依賴即可。代碼清單 5?給出了 application.yml 文件的示例。
清單 5. 使用 YAML 表示的配置屬性
spring:profiles: development db:url: jdbc:hsqldb:file:testdbusername: sapassword: --- spring:profiles: test db:url: jdbc:mysql://localhost/testusername: testpassword: test代碼清單 5?中的 YAML 文件同時(shí)給出了 development 和 test 兩個(gè)不同的 profile 的配置信息,這也是 YAML 文件相對于屬性文件的優(yōu)勢之一。除了使用“@Value”注解綁定配置屬性值之外,還可以使用更加靈活的方式。代碼清單 6?給出的是使用代碼清單 5?中的 YAML 文件的 Java 類。通過“@ConfigurationProperties(prefix="db")”注解,配置屬性中以“db”為前綴的屬性值會被自動(dòng)綁定到 Java 類中同名的域上,如 url 域的值會對應(yīng)屬性“db.url”的值。只需要在應(yīng)用的配置類中添加“@EnableConfigurationProperties”注解就可以啟用該自動(dòng)綁定功能。
清單 6. 使用 YAML 文件的 Java 類
@Component @ConfigurationProperties(prefix="db") public class DBSettings {private String url;private String username;private String password; }開發(fā) Web 應(yīng)用
Spring Boot 非常適合于開發(fā)基于 Spring MVC 的 Web 應(yīng)用。通過內(nèi)嵌的 Tomcat 或 Jetty 服務(wù)器,可以簡化對 Web 應(yīng)用的部署。Spring Boot 通過自動(dòng)配置功能對 Spring MVC 應(yīng)用做了一些基本的配置,使其更加適合一般 Web 應(yīng)用的開發(fā)要求。
HttpMessageConverter
Spring MVC 中使用 HttpMessageConverter 接口來在 HTTP 請求和響應(yīng)之間進(jìn)行消息格式的轉(zhuǎn)換。默認(rèn)情況下已經(jīng)通過 Jackson 支持 JSON 和通過 JAXB 支持 XML 格式。可以通過創(chuàng)建自定義 HttpMessageConverters 的方式來添加其他的消息格式轉(zhuǎn)換實(shí)現(xiàn)。
靜態(tài)文件
默認(rèn)情況下,Spring Boot 可以對 “/static”、“/public”、“/resources” 或 “/META-INF/resources” 目錄下的靜態(tài)文件提供支持。同時(shí) Spring Boot 還支持 Webjars。路徑“/webjars/**”下的內(nèi)容會由 webjar 格式的 Jar 包來提供。
生產(chǎn)環(huán)境運(yùn)維支持
與開發(fā)和測試環(huán)境不同的是,當(dāng)應(yīng)用部署到生產(chǎn)環(huán)境時(shí),需要各種運(yùn)維相關(guān)的功能的支持,包括性能指標(biāo)、運(yùn)行信息和應(yīng)用管理等。所有這些功能都有很多技術(shù)和開源庫可以實(shí)現(xiàn)。Spring Boot 對這些運(yùn)維相關(guān)的功能進(jìn)行了整合,形成了一個(gè)功能完備和可定制的功能集,稱之為 Actuator。只需要在 POM 文件中增加對 “org.springframe.boot:spring-boot-starter-actuator” 的依賴就可以添加 Actuator。Actuator 在添加之后,會自動(dòng)暴露一些 HTTP 服務(wù)來提供這些信息。這些 HTTP 服務(wù)的說明如表 2。
表 2. Spring Boot Actuator 所提供的 HTTP 服務(wù)
| autoconfig | 顯示 Spring Boot 自動(dòng)配置的信息。 | 是 |
| beans | 顯示應(yīng)用中包含的 Spring bean 的信息。 | 是 |
| configprops | 顯示應(yīng)用中的配置參數(shù)的實(shí)際值。 | 是 |
| dump | 生成一個(gè) thread dump。 | 是 |
| env | 顯示從 ConfigurableEnvironment 得到的環(huán)境配置信息。 | 是 |
| health | 顯示應(yīng)用的健康狀態(tài)信息。 | 否 |
| info | 顯示應(yīng)用的基本信息。 | 否 |
| metrics | 顯示應(yīng)用的性能指標(biāo)。 | 是 |
| mappings | 顯示 Spring MVC 應(yīng)用中通過“ @RequestMapping”添加的路徑映射。 | 是 |
| shutdown | 關(guān)閉應(yīng)用。 | 是 |
| trace | 顯示應(yīng)用相關(guān)的跟蹤(trace)信息。 | 是 |
對于表 2中的每個(gè)服務(wù),通過訪問名稱對應(yīng)的 URL 就可以獲取到相關(guān)的信息。如訪問“/info”就可以獲取到 info 服務(wù)對應(yīng)的信息。服務(wù)是否包含敏感信息說明了該服務(wù)暴露出來的信息是否包含一些比較敏感的信息,從而確定是否需要添加相應(yīng)的訪問控制,而不是對所有人都公開。所有的這些服務(wù)都是可以配置的,比如通過改變名稱來改變相應(yīng)的 URL。下面對幾個(gè)重要的服務(wù)進(jìn)行介紹。
health 服務(wù)
Spring Boot 默認(rèn)提供了對應(yīng)用本身、關(guān)系數(shù)據(jù)庫連接、MongoDB、Redis 和 Rabbit MQ 的健康狀態(tài)的檢測功能。當(dāng)應(yīng)用中添加了 DataSource 類型的 bean 時(shí),Spring Boot 會自動(dòng)在 health 服務(wù)中暴露數(shù)據(jù)庫連接的信息。應(yīng)用也可以提供自己的健康狀態(tài)信息,如代碼清單 7 所示。
清單 7. 自定義 health 服務(wù)
@Component public class AppHealthIndicator implements HealthIndicator {@Overridepublic Health health() {return Health.up().build();} }應(yīng)用只需要實(shí)現(xiàn) org.springframework.boot.actuate.health.HealthIndicator 接口,并返回一個(gè) org.springframework.boot.actuate.health.Health 對象,就可以通過 health 服務(wù)來獲取所暴露的信息。如代碼清單 8?所示。
清單 8. health 服務(wù)返回的結(jié)果
{"status":"UP","app":{"status":"UP"},"db":{"status":"UP","database":"HSQL Database Engine","hello":1}}info 服務(wù)
info 服務(wù)所暴露的信息是完全由應(yīng)用來確定的。應(yīng)用中任何以“info.”開頭的配置參數(shù)會被自動(dòng)的由 info 服務(wù)來暴露。只需要往 application.properties 中添加以“info.”開頭的參數(shù)即可,如代碼清單 9?所示。
清單 9. 添加 info 服務(wù)所需配置參數(shù)的屬性文件
info.app_name=My First Spring Boot Application info.app_version=1.0.0當(dāng)訪問“/info”時(shí),訪問的 JSON 數(shù)據(jù)如代碼清單 10?所示。
清單 10. Info 服務(wù)返回的結(jié)果
{"app_name":"My First Spring Boot Application","app_version":"1.0.0"}metrics 服務(wù)
當(dāng)訪問 metrics 服務(wù)時(shí),可以看到 Spring Boot 通過 SystemPublicMetrics 默認(rèn)提供的一些系統(tǒng)的性能參數(shù)值,包括內(nèi)存、CPU、Java 類加載和線程等的基本信息。應(yīng)用可以記錄其他所需要的信息。Spring Boot 默認(rèn)提供了兩種類型的性能指標(biāo)記錄方式:gauge 和 counter。gauge 用來記錄單個(gè)絕對數(shù)值,counter 用來記錄增量或減量值。比如在一個(gè) Web 應(yīng)用中,可以用 counter 來記錄當(dāng)前在線的用戶數(shù)量。當(dāng)用戶登錄時(shí),把 counter 的值加 1;當(dāng)用戶退出時(shí),把 counter 的值減 1。代碼清單 11?給出了一個(gè)示例。
清單 11. 自定義的 metrics 服務(wù)
@RestController public class GreetingsController {@Autowiredprivate CounterService counterService;@RequestMapping("/greet")public String greet() {counterService.increment("myapp.greet.count");return "Hello!";} }在代碼清單 11?中添加了對 Spring Boot 提供的 CounterService 的依賴。當(dāng) greet 方法被調(diào)用時(shí),會把名稱為“myapp.greet.count”的計(jì)數(shù)器的值加 1。也就是當(dāng)用戶每次訪問“/greet”時(shí),該計(jì)算器就會被加 1。除了 CounterService 之外,還可以使用 GaugeService 來記錄絕對值。
使用 JMX 進(jìn)行管理
添加 Actuator 后所暴露的 HTTP 服務(wù)只能提供只讀的信息。如果需要對應(yīng)用在運(yùn)行時(shí)進(jìn)行管理,則需要用到 JMX。Spring Boot 默認(rèn)提供了 JMX 管理的支持。只需要通過 JDK 自帶的 JConsole 連接到應(yīng)用的 JMX 服務(wù)器,就可以看到在域“org.springframework.boot”中 mbean??梢酝ㄟ^ Spring 提供的 @ManagedResource、@ManagedAttribute 和 @ManagedOperation 注解來創(chuàng)建應(yīng)用自己的 mbean。
回頁首
使用 Spring Boot CLI
Spring Boot 提供了命令行工具來運(yùn)行 Groovy 文件。命令行工具的安裝非常簡單,只需要下載之后解壓縮即可。下載地址見參考資源。解壓之后可以運(yùn)行 spring 命令來使用該工具。通過 Groovy 開發(fā)的應(yīng)用與使用 Java 并沒有差別,只不過使用 Groovy 簡化的語法可以使得代碼更加簡單。代碼清單 12?給出了與代碼清單 2?功能相同的 Groovy 實(shí)現(xiàn)。
清單 12. 使用 Groovy 的示例應(yīng)用
@RestController class WebApplication {@RequestMapping("/")String home() {"Hello World!"} }只需要使用“spring run app.groovy”就可以運(yùn)行該應(yīng)用。還可以使用 Groovy 提供的 DSL 支持來簡化應(yīng)用,如代碼清單 13?所示。
清單 13. 使用 Groovy DSL 簡化應(yīng)用
@RestController class WebApplication {@AutowiredService service@RequestMapping("/")String home() {service.greet()} } class Service { String messageString greet() {message} } beans {service(Service) {message = "Another Hello"} }在代碼清單 13?中,通過“beans”DSL 可以快速創(chuàng)建和配置 Spring bean。
結(jié)束語
對于廣大使用 Spring 框架的開發(fā)人員來說,Spring Boot 無疑是一個(gè)非常實(shí)用的工具。本文詳細(xì)介紹了如何通過 Spring Boot 快速創(chuàng)建 Spring 應(yīng)用以及它所提供的自動(dòng)配置和外部化配置的能力,同時(shí)還介紹了 Spring Boot 內(nèi)建的 Actuator 提供的可以在生產(chǎn)環(huán)境中直接使用的性能指標(biāo)、運(yùn)行信息和應(yīng)用管理等功能,最后介紹了 Spring Boot 命令行工具的使用。通過基于依賴的自動(dòng)配置功能,使得 Spring 應(yīng)用的配置變得非常簡單。在依賴的管理上也變得更加簡單,不需要開發(fā)人員自己來進(jìn)行整合。Actuator 所提供的功能非常實(shí)用,對于在生產(chǎn)環(huán)境下對應(yīng)用的監(jiān)控和管理是大有好處的。Spring Boot 應(yīng)該成為每個(gè)使用 Spring 框架的開發(fā)人員使用的工具。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/6001152.html
總結(jié)
以上是生活随笔為你收集整理的使用 Spring Boot 快速构建 Spring 框架应用--转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring控制并发数的工具类Concu
- 下一篇: Java ConcurrentHashM