使用Spring Boot很容易建立一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的項目,使用Spring Boot你能夠不用或者只須要不多的Spring配置。 html
Spring將不少魔法帶入了Spring應用程序的開發之中,其中最重要的是如下四個核心。java
Java版本:推薦使用java8mysql
構建一個Sping Boot的Maven項目,強烈推薦Spring Initializr,它從本質上來講就是一個Web應用程序,它能爲你生成Spring Boot項目結構。
Spring Initializr有幾種用法:git
@SpringBootApplication是Sprnig Boot項目的核心註解,主要目的是開啓自動配置。
使用命令 mvn spring-boot:run」在命令行啓動該應用github
spring-boot配置文件application.properties支持的屬性列表:http://docs.spring.io/spring-...
一、直接在要使用的地方經過註解@Value(value=」${configName}」)就能夠綁定到你想要的屬性上面。
二、在application.properties中的各個參數之間也能夠直接引用來使用。web
com.name="111" com.want="222" com.dudu.yearhope=${com.name}-${com.want}
三、有時候屬性太多了,一個個綁定到屬性字段上太累,官方提倡綁定一個對象的bean,這裏咱們建一個ConfigBean.java類,頂部須要使用註解@ConfigurationProperties(prefix = 「com.xxx」)來指明使用哪一個.這點能夠參考:org.springframework.boot.autoconfigure.jdbc.DataSourceProperties類的寫法spring
這裏配置完還須要在spring Boot入口類加上@EnableConfigurationProperties並指明要加載哪一個bean
好比:@EnableConfigurationProperties(DataSourceProperties.class)sql
四、有時候咱們不但願把全部配置都放在application.properties裏面,這時候咱們能夠另外定義一個,如test.properties,路徑跟也放在src/main/resources下面。
咱們新建一個bean類,以下:shell
@Configuration @ConfigurationProperties(prefix = "com.md") @PropertySource("classpath:test.properties") public class ConfigTestBean { private String name; private String want; // 省略getter和setter }
五、隨機值配置
配置文件中${random} 能夠用來生成各類不一樣類型的隨機值,從而簡化了代碼生成的麻煩,例如 生成 int 值、long 值或者 string 字符串。數據庫
dudu.number=${random.int} dudu.uuid=${random.uuid} dudu.number.less.than.ten=${random.int(10)} dudu.number.in.range=${random.int[1024,65536]}
六、外部配置-命令行參數配置
如java -jar xx.jar --server.port=9090
其中server.port是application.properties裏面的選項
七、Profile-多環境配置
在Spring Boot中多環境配置文件名須要知足application-{profile}.properties的格式,其中{profile}對應你的環境標識,好比:
application-dev.properties:開發環境
application-prod.properties:生產環境
想要使用對應的環境,有兩種方式
spring.profiles.active
屬性來設置,值對應上面提到的{profile},這裏就是指dev、prod這2個。java -jar xxx.jar --spring.profiles.active=dev
$ export SPRING_PROFILES_ACTIVE=production
在代碼裏,咱們還能夠直接用@Profile
註解來進行配置
以下:
/** * 測試數據庫 */ @Component @Profile("testdb") public class TestDBConnector implements DBConnector { @Override public void configure() { System.out.println("testdb"); } } /** * 生產數據庫 */ @Component @Profile("devdb") public class DevDBConnector implements DBConnector { @Override public void configure() { System.out.println("devdb"); } }
經過在配置文件激活具體使用哪一個實現類spring.profiles.active=testdb
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplication背後:打開源碼看看,有三個Annotation原註解:
@EnableAutoConfiguration這個Annotation最爲重要(點開源碼看看),Spring框架提供的各類名字爲@Enable開頭的Annotation定義?好比@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和作事方式其實一脈相承,簡單歸納一下就是,藉助@Import的支持,收集和註冊特定場景相關的bean定義。
藉助於Spring框架原有的一個工具類:SpringFactoriesLoader的支持,@EnableAutoConfiguration能夠智能的自動配置 SpringFactoriesLoader
屬於Spring框架私有的一種擴展方案,其主要功能就是從指定的配置文件META-INF/spring.factories
加載配置。
@EnableAutoConfiguration自動配置的魔法騎士是從classpath中搜尋全部的META-INF/spring.factories配置文件,並將其中org.springframework.boot.autoconfigure.EnableutoConfiguration對應的配置項(主要在SpringBoot的autoconfigure依賴包中)經過反射(Java Refletion)實例化爲對應的標註了@Configuration的JavaConfig形式的IoC容器配置類,而後彙總爲一個並加載到IoC容器。
1) 若是使用的是SpringApplication.run靜態方法,那麼,這個方法裏面首先要建立一個SpringApplication實例,在初始化的時候,它會提早作幾件事情:
ApplicationContextInitializer,ApplicationListener
2)執行run方法的邏輯,首先遍歷執行全部經過SpringFactoriesLoader能夠查找到並加載的SpringApplicationRunListener。調用它們的started()方法。而後
建立並配置當前Spring Boot應用將要使用的Environment(包括配置要使用的PropertySource以及Profile)。而後遍歷調用全部SpringApplicationRunListener的environmentPrepared()的方法。以後,若是SpringApplication的showBanner屬性被設置爲true,則打印banner。
3) 根據用戶是否明確設置了applicationContextClass類型以及初始化階段的推斷結果,決定該爲當前SpringBoot應用建立什麼類型的ApplicationContext並建立完成,而後根據條件決定是否添加ShutdownHook,決定是否使用自定義的BeanNameGenerator,決定是否使用自定義的ResourceLoader,固然,最重要的,將以前準備好的Environment設置給建立好的ApplicationContext使用。
4) ApplicationContext建立好以後,遍歷調用先前找到的ApplicationContextInitializer的initialize(applicationContext)方法來對已經建立好的ApplicationContext進行進一步的處理。
5) 遍歷調用全部SpringApplicationRunListener的contextPrepared()方法。
6) 最核心的一步,將以前經過@EnableAutoConfiguration獲取的全部配置以及其餘形式的IoC容器配置加載到已經準備完畢的ApplicationContext。
7) 遍歷調用全部SpringApplicationRunListener的contextLoaded()方法。
8) 調用ApplicationContext的refresh()方法,完成IoC容器可用的最後一道工序。
9) 查找當前ApplicationContext中是否註冊有CommandLineRunner,若是有,則遍歷執行它們。
10) 正常狀況下,遍歷執行SpringApplicationRunListener的finished()方法.
Spring Boot爲Spring MVC提供適用於多數應用的自動配置功能。在Spring默認基礎上,自動配置添加了如下特性:
若是想全面控制Spring MVC,你能夠添加本身的@Configuration,並使用@EnableWebMvc對其註解。若是想保留Spring Boot MVC的特性,並只是添加其餘的MVC配置(攔截器,formatters,視圖控制器等),你能夠添加本身的WebMvcConfigurerAdapter
類型的@Bean(不使用@EnableWebMvc註解)
例如:配置一個攔截器
@Configuration public class WebConfiguration extends WebMvcConfigurerAdapter { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public LocaleChangeInterceptor localeChangeInterceptor() { return new LocaleChangeInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry { registry.addInterceptor(localeChangeInterceptor()); } }
Spring Boot 默認爲咱們提供了靜態資源處理,使用 WebMvcAutoConfiguration 中的配置各類屬性。
建議你們使用Spring Boot的默認配置方式,提供的靜態資源映射以下:
這使用了Spring MVC的ResourceHttpRequestHandler.
Spring Boot支持多種模版引擎包括:
JSP技術Spring Boot官方是不推薦的,緣由有三:
當你使用上述模板引擎中的任何一個,它們默認的模板配置路徑爲:src/main/resources/templates。固然也能夠修改這個路徑
Spring Boot自動配置的默認錯誤處理器會查找名爲error
的視圖,若是找不到就用默認的白標
錯誤視圖,如圖3-1所示。所以,最簡單的方法就是建立一個自定義視圖,讓解析出的視圖名爲
error。
這一點歸根到底取決於錯誤視圖解析時的視圖解析器。
Spring Boot會爲錯誤視圖提供以下錯誤屬性。
spring-boot-starter-logging
根據不一樣的日誌系統,你能夠按以下規則組織配置文件名,就能被正確加載:
若是你不想用logback.xml做爲Logback配置的名字,能夠經過logging.config屬性指定自定義的名字:
logging.config=classpath:logging-config.xml
據不一樣環境(prod:生產環境,test:測試環境,dev:開發環境)來定義不一樣的日誌輸出,在 logback-spring.xml中使用 springProfile 節點來定義,方法以下:文件名稱不是logback.xml,想使用spring擴展profile支持,要以logback-spring.xml命名
<!-- 測試環境+開發環境. 多個使用逗號隔開. --> <springProfile name="test,dev"> <logger name="com.dudu.controller" level="info" /> </springProfile> <!-- 生產環境. --> <springProfile name="prod"> <logger name="com.dudu.controller" level="ERROR" /> </springProfile>
能夠啓動服務的時候指定 profile (如不指定使用默認),如指定prod 的方式爲:
java -jar xxx.jar –spring.profiles.active=prod
一、使用普通jdbc
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
application.properties中配置數據源信息。
spring.datasource.url = jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password = root spring.datasource.driver-class-name = com.mysql.jdbc.Driver
自定義數據源
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19</version> </dependency>
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private Environment env; //destroy-method="close"的做用是當數據庫鏈接不使用的時候,就把該鏈接從新放到數據池中,方便下次使用調用. @Bean(destroyMethod = "close") public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(env.getProperty("spring.datasource.url")); dataSource.setUsername(env.getProperty("spring.datasource.username"));//用戶名 dataSource.setPassword(env.getProperty("spring.datasource.password"));//密碼 dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); dataSource.setInitialSize(2);//初始化時創建物理鏈接的個數 dataSource.setMaxActive(20);//最大鏈接池數量 dataSource.setMinIdle(0);//最小鏈接池數量 dataSource.setMaxWait(60000);//獲取鏈接時最大等待時間,單位毫秒。 dataSource.setValidationQuery("SELECT 1");//用來檢測鏈接是否有效的sql dataSource.setTestOnBorrow(false);//申請鏈接時執行validationQuery檢測鏈接是否有效 dataSource.setTestWhileIdle(true);//建議配置爲true,不影響性能,而且保證安全性。 dataSource.setPoolPreparedStatements(false);//是否緩存preparedStatement,也就是PSCache return dataSource; } }
Spring Boot自動配置自帶了不少配置類,每個都能運用
在你的應用程序裏。它們都使用了Spring 4.0的條件化配置,能夠在運行時判斷這個配置是該被運
用,仍是該被忽略。如:
@Bean @ConditionalOnMissingBean(JdbcOperations.class) public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(this.dataSource); }
條件註解有以下:
@RunWith(SpringRunner.class) @SpringBootTest(classes = App.class) public MyTest{ @Test public void test1(){ } }
一、普通測試
@RunWith(SpringRunner.class) @SpringBootTest(classes = App.class) @WebAppConfiguration public class MockMvcWebTests { @Autowired private WebApplicationContext webContext; private MockMvc mockMvc; @Before public void setupMockMvc() { mockMvc = MockMvcBuilders.webAppContextSetup(webContext).build(); } @Test public void homePage() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/readingList")) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.view().name("readingList")) .andExpect(MockMvcResultMatchers.model().attributeExists("books")) .andExpect(MockMvcResultMatchers.model().attribute("books", Matchers.is(Matchers.empty()))); } }
首先向/readingList發起一個GET請求,接下來但願該
請求處理成功(isOk()會判斷HTTP 200響應碼),而且視圖的邏輯名稱爲readingList。測試
還要判定模型包含一個名爲books的屬性,該屬性是一個空集合。全部的斷言都很直觀。
二、測試運行中的應用程序 在測試類上添加, 以Spring的@Web-IntegrationTest
註解,能夠聲明你不只但願Spring Boot爲測試建立應用程序上下文,還要啓動一個嵌入式的Servlet容器。一旦應用程序運行在嵌入式容器裏,你就能夠發起真實的HTTP請求,斷言結果了。
這裏採用@WebIntegration-Test,在服務器裏啓動了應用程序RestTemplate
對應用程序發起HTTP請求。
Spring-boot 1.4之後推薦採用SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT) (or RANDOM_PORT)來代替@WebIntegrationTest,而此類在1.5已經被移除了。https://github.com/spring-pro...
@RunWith(SpringRunner.class) @SpringBootTest(classes = App.class,webEnvironment=WebEnvironment.RANDOM_PORT) public class WebInRuntimeTest { @Value("${local.server.port}") private int port; @Autowired private TestRestTemplate template; @Test public void test1(){ // Assert.state(true,"測試成功"); System.out.println(port); ResponseEntity<String> response=template.getForEntity("/test/111", String.class); System.out.println(response.getStatusCodeValue()); System.out.println(response.getHeaders()); System.out.println(response.getBody()); Assert.hasText("111","true"); } }
用隨機端口啓動服務器,@WebIntegrationTest的value屬性接受一個String數組,數組中的每項都是鍵值對,形如name=value,用來設置測試中使用的屬性。要設置server.port,你能夠這樣作:**@WebIntegrationTest("server.port:0") //使用0表示端口號隨機,也能夠具體指定如8888這樣的固定端口.
或者直接這樣@WebIntegrationTest(randomPort=true)**
Spring Boot將local.server.port的值設置爲了選中的端口。咱們只需使用Spring的@Value註解將其注入便可:
@Value("${local.server.port}") private int port;
三、使用Selenium 測試HTML 頁面
@RunWith(SpringRunner.class) @SpringBootTest(classes = App.class) @WebIntegrationTest(randomPort=true) public class ServerWebTests { private static FirefoxDriver browser; @Value("${local.server.port}") private int port; @BeforeClass public static void openBrowser() { browser = new FirefoxDriver(); browser.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void addBookToEmptyList() { String baseUrl = "http://localhost:" + port; browser.get(baseUrl); assertEquals("You have no books in your book list",browser.findElementByTagName("div").getText()); browser.findElementByName("title").sendKeys("BOOK TITLE"); browser.findElementByTagName("form").submit(); WebElement dl = browser.findElementByCssSelector("dt.bookHeadline"); assertEquals("BOOK TITLE by BOOK AUTHOR (ISBN: 1234567890)",dl.getText()); } @AfterClass public static void closeBrowser() { browser.quit(); } }
當咱們不想使用內嵌tomcat部署時,咱們也可使用外部tomcat,並打包成war:
https://docs.spring.io/spring...
一、Spring Loaded 實現熱部署
Spring Loaded是一個用於在JVM運行時從新加載類文件更改的JVM代理,Spring Loaded容許你動態的新增/修改/刪除某個方法/字段/構造方法,一樣能夠修改做用在類/方法/字段/構造方法上的註解.也能夠新增/刪除/改變枚舉中的值。
spring-loaded是一個開源項目,項目地址:https://github.com/spring-pro...
Spring Loaded有兩種方式實現,分別是Maven引入依賴方式或者添加啓動參數方式
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> </plugin>
啓動:mvn spring-boot:run
注意:maven依賴的方式只適合spring-boot:run的啓動方式,右鍵那種方式不行。
出現以下配置表實配置成功:
[INFO] Attaching agents: [C:Userstengj.m2repositoryorgspringframeworkspringloaded1.2.6.R
添加啓動參數方式
這種方式是右鍵運行啓動類.首先先下載對應的springloaded-xxx.RELEASE.jar,能夠去上面提到的官網獲取,在VM options中輸入-javaagent:< pathTo >/springloaded-{VERSION}.jar
上面2種方式隨便選擇一種便可,當系統經過 mvn spring-boot:run啓動或者 右鍵application debug啓動Java文件時,系統會監視classes文件,當有classes文件被改動時,系統會從新加載類文件,不用重啓啓動服務。
注:IDEA下須要從新編譯文件 Ctrl+Shift+F9或者編譯項目 Ctrl+F9
在 Spring Boot,模板引擎的頁面默認是開啓緩存,若是修改頁面內容,刷新頁面是沒法獲取修改後的頁面內容,因此,若是咱們不須要模板引擎的緩存,能夠進行關閉。
spring.freemarker.cache=false spring.thymeleaf.cache=false spring.velocity.cache=false spring.mustache.cache=false
不過仍是有一些狀況下須要從新啓動,不可用的狀況以下:
二、spring-boot-devtools 實現熱部署
spring-boot-devtools爲應用提供一些開發時特性,包括默認值設置,自動重啓,livereload等。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies>
將依賴關係標記爲可選< optional >true< /optional>是一種最佳作法,能夠防止使用項目將devtools傳遞性地應用於其餘模塊。
在Spring Boot集成Thymeleaf時,spring.thymeleaf.cache屬性設置爲false能夠禁用模板引擎編譯的緩存結果。
如今,devtools會自動幫你作到這些,禁用全部模板的緩存,包括Thymeleaf, Freemarker, Groovy Templates, Velocity, Mustache等。
自動重啓的原理在於spring boot使用兩個classloader:不改變的類(如第三方jar)由base類加載器加載,正在開發的類由restart類加載器加載。應用重啓時,restart類加載器被扔掉重建,而base類加載器不變,這種方法意味着應用程序從新啓動一般比「冷啓動」快得多,由於base類加載器已經可用並已填充。
因此,當咱們開啓devtools後,classpath中的文件變化會致使應用自動重啓。
固然不一樣的IDE效果不同,Eclipse中保存文件便可引發classpath更新(注:須要打開自動編譯),從而觸發重啓。而IDEA則須要本身手動CTRL+F9從新編譯一下(感受IDEA這種更好,否則每修改一個地方就重啓,好蛋疼)
排除靜態資源文件
靜態資源文件在改變以後有時候不必觸發應用程序重啓,例如thymeleaf模板文件就能夠實時編輯,默認狀況下,更改/META-INF/maven, /META-INF/resources ,/resources ,/static ,/public 或/templates下的資源不會觸發重啓,而是觸發live reload(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新,須要瀏覽器插件支持)。
可使用spring.devtools.restart.exclude屬性配置,例如
spring.devtools.restart.exclude=static/**,public/**
若是想保留默認配置,同時增長新的配置,則可以使用
spring.devtools.restart.additional-exclude屬性
觀察額外的路徑
若是你想觀察不在classpath中的路徑的文件變化並觸發重啓,則能夠配置 spring.devtools.restart.additional-paths 屬性。
不在classpath內的path能夠配置spring.devtools.restart.additionalpaths屬性來增長到監視中,同時配置spring.devtools.restart.exclude能夠選擇這些path的變化是致使restart仍是live reload。
關閉自動重啓
設置 spring.devtools.restart.enabled 屬性爲false,能夠關閉該特性。能夠在application.properties中設置,也能夠經過設置環境變量的方式。
public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(MyApp.class, args); }
使用一個觸發文件
若不想每次修改都觸發自動重啓,能夠設置spring.devtools.restart.trigger-file指向某個文件,只有更改這個文件時才觸發自動重啓。
自定義自動重啓類加載器
默認時,IDE中打開的項目都會由restart加載器加載,jar文件由Base加載器加載,可是若你使用multi-module的項目,而且不是全部模塊都被導入到IDE中,此時會致使加載器不一致。這時你能夠建立META-INF/spring-devtools.properties文件,並增長restart.exclude.XXX,restart.include.XXX來配置哪些jar被restart加載,哪些被base加載。如:
restart.include.companycommonlibs=/mycorp-common-[\\w-]+\.jar restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
若是您不想在應用程序運行時啓動LiveReload服務器,則能夠將spring.devtools.livereload.enabled屬性設置爲false。
一次只能運行一個LiveReload服務器。開始應用程序以前,請確保沒有其餘LiveReload服務器正在運行。
若是你的IDE啓動多個應用程序,則只有第一個應用程序將支持LiveReload。
三、JRebel插件方式 :略
Spring Boot爲兩款流行的數據庫遷移庫提供了自動配置支持。
Flyway(http://flywaydb.org)
Liquibase(http://www.liquibase.org)
<dependency> <groupId>org.flywayfb</groupId> <artifactId>flyway-core</artifactId> </dependency>
Flyway是一個很是簡單的開源數據庫遷移庫,使用SQL來定義遷移腳本。它的理念是,每一個
腳本都有一個版本號,Flyway會順序執行這些腳本,讓數據庫達到指望的狀態。它也會記錄已執
行的腳本狀態,不會重複執行。
,Flyway腳本就是SQL。讓其發揮做用的是其在Classpath裏的位置和文件名。Flyway
腳本都遵循一個命名規範,V版本號__描述.sql,如V1__initdb.sql
Flyway腳本須要放在src/main/resources/db/migration裏。
你還須要將spring.jpa.hibernate.ddl-auto設置爲none,由此告知Hibernate不要建立
數據表。
原理:在應用程序部署並運行起來後,Spring Boot會檢測到Classpath裏的Flyway,自動配置所需的
Bean。Flyway會依次查看/db/migration裏的腳本,若是沒有執行過就運行這些腳本。每一個腳本都
執行事後,向schema_version表裏寫一條記錄。應用程序下次啓動時,Flyway會先看schema_version
裏的記錄,跳過那些腳本。
相比Flyway的優勢,數據庫無關性,腳本不是用sql寫,而是支持yaml,json,xml等格式。
<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency>
具體介紹:略。
運行中的應用程序就像禮物盒。你能夠刺探它,做出合理的推測,猜想它的運行狀況。但如
何瞭解真實的狀況呢?有沒有一種辦法能讓你深刻應用程序內部一窺究竟,瞭解它的行爲,檢查
它的健康情況,甚至觸發一些操做來影響應用程序呢?
Spring Boot的Actuator。它提供了不少生產級的特性,好比監控和度
量Spring Boot應用程序。Actuator的這些特性能夠經過衆多REST端點、遠程shell和JMX得到。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
一、Actuator的Web端點
端點能夠分爲三大類:配置端點、度量端點和其餘端點
/beans端點產生的報告能告訴你Spring應用程序上下文裏都有哪些Bean。
/autoconfig端點能告
訴你爲何會有這個Bean,或者爲何沒有這個Bean。
Spring Boot自動配置構建於Spring的條件化配置之上。它提供了衆多帶有
@Conditional註解的配置類,根據條件決定是否要自動配置這些Bean。/autoconfig端點提供了
一個報告,列出了計算過的全部條件,根據條件是否經過進行分組。
/env端點會生成應用程序可用的全部環境屬性的列表,不管這些屬性是否用到。這其中包括
環境變量、JVM屬性、命令行參數,以及applicaition.properties或application.yml文件提供的屬性。
/metrics端點提供了一些針對Web請求的基本計數器和計時器,但那些度量值缺乏詳細信
息。知道所處理請求的更多信息是頗有幫助的,尤爲是在調試時,因此就有了/trace這個端點。
/trace端點能報告全部Web請求的詳細信息,包括請求方法、路徑、時間戳以及請求和響應的
頭信息
二、使用:CRaSH shell
三、經過JMX 監控應用程序
Book: Spring-Boot In Action
嘟嘟獨立博客
https://github.com/tengj/Spri...