本文參考自Spring Boot文檔。
Spring Boot 簡(jiǎn)介
Spring框架功能很強(qiáng)大涵妥,但是就算是一個(gè)很簡(jiǎn)單的項(xiàng)目乖菱,我們也要配置很多東西。因此就有了Spring Boot框架,它的作用很簡(jiǎn)單窒所,就是幫我們自動(dòng)配置鹉勒。Spring Boot框架的核心就是自動(dòng)配置,只要存在相應(yīng)的jar包吵取,Spring就幫我們自動(dòng)配置禽额。如果默認(rèn)配置不能滿足需求,我們還可以替換掉自動(dòng)配置類海渊,使用我們自己的配置绵疲。另外,Spring Boot還集成了嵌入式的Web服務(wù)器,系統(tǒng)監(jiān)控等很多有用的功仁讨,讓我們快速構(gòu)建企業(yè)及應(yīng)用程序绍些。
創(chuàng)建項(xiàng)目
創(chuàng)建項(xiàng)目
創(chuàng)建項(xiàng)目很簡(jiǎn)單。如果使用STS的話铸题,新建Spring Starter項(xiàng)目即可。如果使用IDEA的話,新建Spring Initializer項(xiàng)目缺狠。如果不想使用IDE的話,從start.spring.io創(chuàng)建項(xiàng)目也可以萍摊。例如下面就是一個(gè)Spring Boot項(xiàng)目的build.gradle
文件挤茄,是我用IDEA創(chuàng)建的項(xiàng)目。由于我是用了最新的快照版本冰木,因此這里的倉(cāng)庫(kù)還多了兩個(gè)Spring的快找倉(cāng)庫(kù)穷劈,可以直接無(wú)視。(因?yàn)?.5的穩(wěn)定版中Thymeleaf的支持才到2踊沸,為了使用最新Thymeleaf3歇终,只能使用最新的快照版。)
我們可以看到Spring Boot和一般的項(xiàng)目差不多逼龟,只不過(guò)多應(yīng)用了Spring Boot插件评凝,它會(huì)讓我們更方便的運(yùn)行Spring。另外在項(xiàng)目中沒(méi)有其他依賴的引用腺律,只引用了Spring Boot Starter依賴奕短,這些依賴會(huì)將可能會(huì)使用到的依賴幫我們引用。例如spring-boot-starter-test
會(huì)引用JUnit匀钧、AssertJ等一些測(cè)試框架翎碑,我們不用再引用了。這極大地方便了我們的開發(fā)榴捡。而且這些依賴不需要指定具體版本杈女,具體的版本由Spring幫我們決定。關(guān)于詳細(xì)的Starter項(xiàng)目和具體jar包的版本號(hào),參考13.5. Starters和F. Dependency versions达椰。
buildscript {
ext {
springBootVersion = '2.0.0.BUILD-SNAPSHOT'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
jar {
baseName = 'spring-boot-sample'
version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-aop')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('org.springframework.boot:spring-boot-devtools')
runtime('org.hsqldb:hsqldb')
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
項(xiàng)目格式
項(xiàng)目格式類似下圖翰蠢,和一般的Maven或者Gradle項(xiàng)目類似,只不過(guò)多了點(diǎn)東西啰劲。資源文件夾下static
文件夾用來(lái)存放web程序的靜態(tài)資源梁沧,例如圖片、css蝇裤、js等廷支。template
文件夾存放web程序的視圖模板,html等需要渲染的模板文件就放在這里栓辜。application.properties
文件很重要恋拍,它是Spring Boot項(xiàng)目的全局配置文件。以往我們需要編寫層級(jí)XML配置文件藕甩,現(xiàn)在只需要在這里使用key=value
方式即可指定這些屬性施敢。默認(rèn)的模板還為我們添加了兩個(gè)類。一個(gè)在main下狭莱,是Spring Boot項(xiàng)目的運(yùn)行類僵娃,另一個(gè)在test下,是測(cè)試類腋妙。
運(yùn)行類的代碼如下默怨。它是一個(gè)簡(jiǎn)單的類,包含了主方法骤素,而且類上使用了@SpringBootApplication注解匙睹。這是一個(gè)慣用注解,它會(huì)幫我們啟用自動(dòng)配置等特性谆甜。
@SpringBootApplication
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
}
如果看一下SpringBootApplication
的源代碼垃僚,類似下面這樣」嫒瑁可以看到谆棺,SpringBootApplication
的功能是通過(guò)幾個(gè)注解實(shí)現(xiàn)的。EnableAutoConfiguration
注解啟用了自動(dòng)配置功能罕袋。ComponentScan
注解會(huì)掃描該類所在的包和子包改淑。所以Spring推薦我們將這個(gè)運(yùn)行類放到項(xiàng)目的根包下,以便我們不需要任何配置即可掃描到所有配置類浴讯。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
Spring Boot項(xiàng)目更喜歡Java配置方式朵夏。因此從這里開始,所有的Spring配置都是用Java方式配置榆纽。當(dāng)然如果你還想使用XML配置文件也可以仰猖,新建一個(gè)空的配置類捏肢,然后添加@ImportResource
注解并傳遞要使用的XML文件路徑即可。
運(yùn)行項(xiàng)目
如果使用Maven的話饥侵,運(yùn)行下面的命令鸵赫。
mvn spring-boot:run
如果使用Gradle的話,使用下面的命令躏升。
gradle bootRun
然后就會(huì)顯示類似下面的輸出辩棒,后面會(huì)跟一大堆日志信息。如果是命令行程序的話膨疏,日志信息之后就會(huì)顯示程序的運(yùn)行結(jié)果了一睁。如果是Web程序的話,默認(rèn)情況下會(huì)使用內(nèi)嵌的Tomcat來(lái)運(yùn)行佃却。我們使用localhost:8080
來(lái)訪問(wèn)即可者吁。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.0.BUILD-SNAPSHOT)
這個(gè)日志可以是彩色的。如果你的輸出不是彩色的双霍,可以在application.properties
文件中添加下面一句砚偶。
spring.output.ansi.enabled=always
項(xiàng)目配置
自定義 SpringApplication
前面我們看到了SpringBoot項(xiàng)目的啟動(dòng)類是這樣的。
@SpringBootApplication()
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
}
其實(shí)洒闸,我們可以自定義它的各種屬性。這時(shí)候需要?jiǎng)?chuàng)建SpringApplication對(duì)象并設(shè)置它的各種屬性均芽。比方說(shuō)下面不顯示Banner丘逸。還有很多配置和用法請(qǐng)查閱官方文檔。
@SpringBootApplication()
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringBootSampleApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
事件和監(jiān)聽器
如果有更高級(jí)的需求可以使用監(jiān)聽器來(lái)管理Spring Boot程序的各個(gè)生命周期掀宋。監(jiān)聽器需要實(shí)現(xiàn)org.springframework.context.ApplicationListener
接口深纲。
public class MyAppListener implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println("應(yīng)用程序準(zhǔn)備就緒");
}
}
在監(jiān)聽器中可以設(shè)置下面幾種事件。
- ApplicationStartingEvent
- ApplicationEnvironmentPreparedEvent
- ApplicationPreparedEvent
- ApplicationReadyEvent
- ApplicationFailedEvent
之后劲妙,把監(jiān)聽器添加到Spring程序中湃鹊。
@SpringBootApplication()
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringBootSampleApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.addListeners(new MyAppListener());
application.run(args);
}
}
Profiles
在Spring Boot中Profiles更簡(jiǎn)單了。我們使用application-{profile}.properties
格式來(lái)區(qū)分不同的Profile镣奋,例如一個(gè)測(cè)試profile(application-test.properties
)币呵,一個(gè)生產(chǎn)環(huán)境profile(application-product.properties
)。
定義好多個(gè)Profiles之后侨颈,還需要在標(biāo)準(zhǔn)的application.properties
中列出和啟用這些Profiles余赢。列出使用spring.profiles.include
,激活其中的一個(gè)使用spring.profiles.active
哈垢。
spring.output.ansi.enabled=always
spring.thymeleaf.cache=false
spring.profiles.include[0]=test
spring.profiles.include[1]=product
spring.profiles.active[0]=test
使用YAML
YAML也是一種配置文件格式妻柒,比方說(shuō)上面的properties,就可以改寫為下面這樣的YAML文件(application.yaml
)耘分。
spring:
output:
ansi:
enabled: always
thymeleaf:
cache: false
profiles:
include:
- product
- test
active: test
如果需要多個(gè)Profile举塔,YAML只需要一個(gè)文件即可绑警,profiles之間使用---
分隔開。
server:
address: 192.168.1.100
---
spring:
profiles: development
server:
address: 127.0.0.1
---
spring:
profiles: production
server:
address: 192.168.1.120
使用Properties還是YAML央渣,根據(jù)個(gè)人喜好即可待秃。
自動(dòng)配置
修改自動(dòng)配置
Spring Boot的核心就是自動(dòng)配置,它為幾乎所有的Spring組件都提供了相應(yīng)的自動(dòng)配置類痹屹,而且默認(rèn)是打開的章郁。所以只要相關(guān)的jar文件存在,這些自動(dòng)配置就會(huì)被使用志衍。其中有些配置屬于必配的(例如Web模板)暖庄,自動(dòng)配置會(huì)為我們省下不少時(shí)間;有些配置(例如數(shù)據(jù)源)則往往需要我們修改楼肪。Spring的自動(dòng)配置是非侵入式的培廓,所以如果我們聲明了自己的數(shù)據(jù)源,那么Spring自動(dòng)配置的嵌入式數(shù)據(jù)源就會(huì)取消春叫。
當(dāng)然如果想要關(guān)閉某些自動(dòng)配置也是可以的肩钠。如果你有自己的主配置類,手動(dòng)在上排除某些自動(dòng)配置類即可暂殖。
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
如果我們使用了SpringBootApplication
注解价匠,那么上面這種方式需要修改一下。SpringBootApplication
注解提供了幾個(gè)屬性呛每,可以控制排除的自動(dòng)配置和組件搜索的路徑踩窖。
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
}
另外還可以直接修改項(xiàng)目的屬性。我們可以編輯application.properties
文件晨横,在其中添加spring.autoconfigure.exclude
屬性并指定要排除的類即可洋腮。
Spring的自動(dòng)配置類一般在org.springframework.boot.autoconfigure
包下,如果我們需要查看當(dāng)前使用了多少個(gè)自動(dòng)配置類手形,可以在運(yùn)行程序的時(shí)候添加--debug
標(biāo)志啥供,這樣Spring會(huì)打印額外的調(diào)試信息。如果需要詳細(xì)的自動(dòng)配置類的列表库糠,可以參考Spring Boot文檔 附錄C. Auto-configuration classes伙狐。
Spring Web MVC自動(dòng)配置
自動(dòng)配置
MVC自動(dòng)配置會(huì)啟用以下功能。
-
ContentNegotiatingViewResolver
和BeanNameViewResolver
beans. - 靜態(tài)資源和WebJars的支持.
- 自動(dòng)注冊(cè)
Converter
,GenericConverter
,Formatter
beans. -
HttpMessageConverters
的支持. - 自動(dòng)注冊(cè)
MessageCodesResolver
. - 靜態(tài)
index.html
的支持. - 自定義Favicon(瀏覽器頁(yè)面的小圖標(biāo)) 支持.
- 自動(dòng)使用ConfigurableWebBindingInitializer bean.
自動(dòng)注冊(cè)指的是曼玩,只需要在Spring中注冊(cè)相應(yīng)類型的Bean鳞骤。Spring Web MVC會(huì)自動(dòng)識(shí)別和使用這些Bean。例如黍判,我們要添加新的HttpMessageConverter
豫尽,只需要向下面這樣。
@Configuration
public class MyConfiguration {
@Bean
public HttpMessageConverters customConverters() {
HttpMessageConverter<?> additional = ...
HttpMessageConverter<?> another = ...
return new HttpMessageConverters(additional, another);
}
}
靜態(tài)資源
靜態(tài)資源默認(rèn)放在resources文件夾的/static
(或/public
或 /resources
或/META-INF/resources
下面顷帖。如果需要配置位置的話美旧,在屬性文件中添加spring.mvc.static-path-pattern=/resources/**
渤滞。
如果需要靜態(tài)主頁(yè),直接在resources/static/
下放入一個(gè)index.html
即可榴嗅。
favicon.ico
如果需要配置自己的favicon.ico
妄呕,只需要將自己的favicon.ico
直接放到resources文件夾下即可。
視圖模板
Spring會(huì)對(duì)Thymeleaf嗽测、Freemarker绪励、Groovy和mustache四種模板進(jìn)行自動(dòng)配置。默認(rèn)的模板路徑為resources/templates
唠粥。
錯(cuò)誤處理
錯(cuò)誤處理和一般的Spring Web MVC類似疏魏,使用@ControllerAdvice
。
自定義錯(cuò)誤頁(yè)面放在下面的路徑晤愧。
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
+- <other public assets>
如果錯(cuò)誤頁(yè)面也需要使用模板引擎動(dòng)態(tài)生成大莫,那么放在下面的路徑。
src/
+- main/
+- java/
| + <source code>
+- resources/
+- templates/
+- error/
| +- 5xx.ftl
+- <other templates>
SQL數(shù)據(jù)庫(kù)自動(dòng)配置
嵌入式數(shù)據(jù)庫(kù)
如果類路徑中包含HSQL官份、Derby或H2的相應(yīng)jar包只厘,那么Spring就會(huì)自動(dòng)配置這些嵌入式數(shù)據(jù)庫(kù)的實(shí)例和數(shù)據(jù)源。它們會(huì)將數(shù)據(jù)保存在內(nèi)存中舅巷,當(dāng)程序結(jié)束之后數(shù)據(jù)會(huì)丟失羔味。這非常適合開發(fā)和測(cè)試。
在不同的測(cè)試中Spring默認(rèn)會(huì)重用這些嵌入式數(shù)據(jù)庫(kù)悄谐。假如不同測(cè)試之間的數(shù)據(jù)不同介评,你可能希望每次測(cè)試都使用新的數(shù)據(jù)庫(kù)。這時(shí)候可以在屬性文件中指定spring.datasource.generate-unique-name=true
爬舰。
生產(chǎn)數(shù)據(jù)庫(kù)
Spring會(huì)自動(dòng)選擇帶連接池的數(shù)據(jù)源,遵循以下規(guī)則:
- 如果存在tomcat-jdbc數(shù)據(jù)源寒瓦,則使用它情屹。
- 否則,如果存在HikariCP杂腰,則使用它垃你。
- 如果前兩個(gè)都不存在,而存在DBCP2喂很,則使用它惜颇。
這時(shí)候我們需要提供數(shù)據(jù)源的額外配置信息。
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
JdbcTemplate
JdbcTemplate
和NamedParameterJdbcTemplate
會(huì)由上面的數(shù)據(jù)源自動(dòng)配置少辣。我們直接使用@Autowire注入到程序中即可凌摄。
JPA自動(dòng)配置
實(shí)體類
JPA Entity類(標(biāo)記了@Entity的類)默認(rèn)在persistence.xml
中配置。在Spring Boot中漓帅,@EnableAutoConfiguration
或 @SpringBootApplication
包下的實(shí)體類會(huì)被自動(dòng)掃描到锨亏。如果希望自定義實(shí)體類的位置痴怨,可以使用@EntityScan
注解,添加到配置類上即可器予。
Spring Data JPA
繼承了 Repository
的接口會(huì)被自動(dòng)掃描到浪藻,我們不需要做任何配置。如果需要配置乾翔,設(shè)置spring.jpa.*
屬性爱葵。例如下面指定了數(shù)據(jù)的生成策略。
spring.jpa.hibernate.ddl-auto=update
H2的web控制臺(tái)
H2嵌入式數(shù)據(jù)庫(kù)提供了一個(gè)基于web界面的控制臺(tái)反浓。這個(gè)控制臺(tái)也可以由Spring自動(dòng)配置萌丈。當(dāng)(1:存在H2相關(guān)jar包,2:當(dāng)前程序是一個(gè)web程序勾习,3:devtoos存在)的情況下浓瞪,Spring便會(huì)自動(dòng)配置H2控制臺(tái)。
web控制臺(tái)的訪問(wèn)路徑默認(rèn)為/h2-console
巧婶。我們可以使用spring.h2.console.path
屬性修改它乾颁。
如圖,這是一個(gè)完整的交互界面艺栈,我們可以方便的在這里處理數(shù)據(jù)英岭。如果需要設(shè)置訪問(wèn)控制權(quán)限,添加下面的屬性湿右。
- security.user.role
- security.basic.authorize-mode
- security.basic.enabled
如果不想使用該控制臺(tái)诅妹,可以使用spring.h2.console.enabled=false
關(guān)閉它。在生產(chǎn)環(huán)境中記得把它關(guān)掉毅人。
最后我要說(shuō)一點(diǎn)吭狡,Spring Boot文檔包含了很多其他Spring項(xiàng)目的自動(dòng)配置,這里不可能全寫完丈莺。所以如果需要詳細(xì)信息的話還是直接啃文檔吧划煮。
其他配置
調(diào)試工具(devtools)
如果使用Maven,添加下面的依賴缔俄。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
如果使用Gradle弛秋,添加下面的依賴。
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
}
這樣就可以將調(diào)試工具添加到項(xiàng)目中俐载。調(diào)試工具添加了熱更新蟹略、自動(dòng)重啟等幾個(gè)非常有用的調(diào)試功能。自動(dòng)重啟需要Spring檢測(cè)到類路徑上有更改遏佣,在Spring Tool Suite中挖炬,簡(jiǎn)單的保存文件即可達(dá)到效果。如果在Intellij IDEA中贼急,只能選擇Build Project茅茂。
輸出日志
Spring Boot默認(rèn)使用Logback來(lái)打印日志捏萍。不過(guò)我們直接使用slf4j提供的接口就可以了。slf4j和Logback也都由Spring自動(dòng)配置好了空闲。我們只需要在屬性文件中設(shè)置日志級(jí)別即可令杈。
logging.level.yitian.study=debug
然后在代碼中調(diào)用slf4j的日志接口并打印日志即可。
@Controller
public class MainController {
private Logger logger = LoggerFactory.getLogger(MainController.class);
@RequestMapping("/")
public String index(@RequestParam(defaultValue = "茍") String name, Model model) {
model.addAttribute("name", name);
logger.debug("訪問(wèn)了主頁(yè)");
return "index";
}
}
日志信息和Spring的輸出格式一樣碴倾。另外隨著日志級(jí)別的變化逗噩,日志的顏色也會(huì)在綠、黃和紅之間變化跌榔,非常方便异雁。
2017-03-16 23:50:19.628 INFO 17220 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 4 ms
2017-03-16 23:50:19.632 ERROR 17220 --- [nio-8080-exec-1] yitian.study.controller.MainController : 訪問(wèn)了主頁(yè)
自定義Banner
這個(gè)Banner也是可以定制的。在類路徑(也就是resource文件夾下)添加banner.txt
僧须,Banner就會(huì)使用你的文本纲刀。Banner甚至可以是一張圖片,支持gif担平、jpg示绊、png等格式。Spring會(huì)將圖片轉(zhuǎn)換成字符形式暂论。
Servlet容器
默認(rèn)情況下Spring使用Tomcat作為嵌入式容器面褐。
端口號(hào)
端口號(hào)使用server.port
設(shè)置。如果希望在運(yùn)行時(shí)隨機(jī)分配一個(gè)未使用的端口號(hào)取胎,可以將端口號(hào)設(shè)置為0:server.port=0
展哭。
使用Jetty
spring-boot-starter-web
包默認(rèn)使用Tomcat,如果我們希望使用Jetty闻蛀,就需要排除Tomcat的包匪傍。使用Maven的話,這么做觉痛。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
如果使用Gradle的話析恢,這么做。
configurations {
compile.exclude module: "spring-boot-starter-tomcat"
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:2.0.0.BUILD-SNAPSHOT")
compile("org.springframework.boot:spring-boot-starter-jetty:2.0.0.BUILD-SNAPSHOT")
// ...
}
響應(yīng)壓縮
使用server.compression.enabled=true
啟用HTTP的響應(yīng)壓縮秧饮。默認(rèn)情況下要壓縮的響應(yīng)體至少需要2048字節(jié),可以使用server.compression.min-response-size
修改這個(gè)值泽篮。
打包和運(yùn)行
Spring Boot項(xiàng)目默認(rèn)打包為jar文件盗尸。我們可以使用Maven或Gradle的打包命令來(lái)打包項(xiàng)目。打包好之后帽撑,就可以和一般jar文件一樣泼各,使用java命令來(lái)運(yùn)行了。如果希望打包為war文件的話也可以亏拉,不過(guò)由于篇幅所限就不介紹了扣蜻。直接看源文檔吧逆巍。
系統(tǒng)監(jiān)控(Actuator)
Actuator我沒(méi)理解怎么翻譯,所以憑我的感覺(jué)就叫做系統(tǒng)監(jiān)控吧莽使。這些功能可以幫助我們監(jiān)控正在運(yùn)行的Spring Boot項(xiàng)目锐极。要啟用監(jiān)控功能,需要添加spring-boot-starter-actuator
芳肌。使用Maven的話灵再,添加下面的依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
如果使用Gradle的話亿笤,添加下面的依賴翎迁。
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
端點(diǎn)(Endpoints)
每個(gè)端點(diǎn)就是一個(gè)監(jiān)控項(xiàng)。Spring包含了很多端點(diǎn)净薛,詳細(xì)列表在這里47. Endpoints汪榔。除了health之外,其余端點(diǎn)都屬于敏感信息肃拜,在沒(méi)有設(shè)置Spring Security的情況下無(wú)法訪問(wèn)痴腌。為了簡(jiǎn)單的在本地訪問(wèn),我們可以設(shè)置management.security.enabled=false
爆班。注意該選項(xiàng)在生產(chǎn)環(huán)境中務(wù)必打開衷掷,保證服務(wù)器信息不會(huì)泄露。
端點(diǎn)的訪問(wèn)路徑默認(rèn)是/端點(diǎn)名
柿菩,例如health的訪問(wèn)路徑就是/health
戚嗅。比較有用的幾個(gè)端點(diǎn)是beans(列出當(dāng)前所有已注冊(cè)的Spring Beans)、mappings(所有的控制器映射路徑)枢舶、trace(最近100個(gè)HTTP連接的信息)懦胞、health(服務(wù)器當(dāng)前的運(yùn)行狀態(tài)和磁盤剩余空間以及數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài))。還有一個(gè)有趣的端點(diǎn)是shutdown凉泄,當(dāng)我們向/shutdown
發(fā)送post請(qǐng)求時(shí)服務(wù)器就會(huì)關(guān)閉躏尉,不過(guò)該功能是默認(rèn)關(guān)閉的。
端點(diǎn)可以在屬性文件中設(shè)置后众,每個(gè)端點(diǎn)敏感性和是否啟用都是可以定制的胀糜。
endpoints.beans.sensitive=false
endpoints.shutdown.enabled=true
端點(diǎn)的訪問(wèn)也是可以定制的。
management.port=8081
management.address=127.0.0.1
好了蒂誉,Spring Boot框架的介紹到此為止教藻。我們已經(jīng)基本看到了Spring Boto的使用方法。當(dāng)然官方文檔還有很多內(nèi)容這里沒(méi)有列出右锨。這里也不可能完全列出來(lái)括堤。如果需要更詳細(xì)的介紹還是直接看官方文檔吧。沒(méi)有比這個(gè)更全面的了。