2019獨角獸企業重金招聘Python工程師標準>>>
一、 讀后感
Spring Boot在技術圈火了好多年了,直到最近才去系統學習它,真是相見恨晚。當我在IDE編寫幾行代碼就把WEB應用啟動,頁面訪訪問出來hello world的時候,我驚訝的感嘆Spring構建WEB應用竟如此簡單。
Spring Boot起源于2014年,是為簡化Spring項目中復雜難記的配置而生。回顧Spring開發歷程,我們定義bean以及依賴關系大概經歷這樣兩個階段:
- 在配置文件中定義。
- 使用注解定義。
redis筆記。雖然使用注解后我們寫配置文件的工作量減少了很多,但是還是得在配置文件中編寫一系列jar依賴,當實現一個功能時可能要引入多個依賴,而這些依賴關系我們難以記得住,更難以搞得清楚。我覺得以前的Spring開發還有兩個比較明顯的痛點:
- 配置文件中的jar依賴較多,且依賴關系復雜。
- 屬性配置值不規范,不方便讀取配置值。
Spring Boot最基本作用就是解決以上痛點,但是其集成的功能遠超過這些。Convention over configuration(約定優于配置)一句話可以簡單概述Spring Boot的基本功能,其起步依賴、自動配置已經約定的屬性值可以把以上兩個痛點處理得相當棒。
另外,Spring Boot自帶的端點度量功能可以讓我們更了解應用的運行狀況。其提供的快速測試和部署方法提高了我們的工作效率。
不得不承認,國外大牛寫的這本書確實容易理解,是一本很好的入門書籍,接下來是我對本書的一些技術總結。
二、啟動第一個Spring Boot項目
java高手筆記,只要三步就可以構建一個Spring Web應用
1. 使用Spring Initializr初始化Spring Boot項目
這一步創建Spring Boot腳手架,方式有好幾種,包括:通過Spring 官網Web界面創建、Spring Tool Suite創建、IDEA等。我就直接使用IDEA創建,效果如下:
這里java、和test目錄定義跟以前一樣。resources下面放應用的資源,static放頁面靜態文件,比如css,html文件。templates下面放模板文件,比如Velocity,Thymeleaf等。application.properties默認屬性文件,只要放里面寫key value對,應用就可以讀取到。
2.生成依賴文件,可以用gradle,maven,我是用maven。只要加入一個web的依賴,一個maven的插件
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
3. 寫代碼
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ControllerDemo {@RequestMapping("/")public String index(){return "hello springboot";}
}package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class ReadlistApplication {public static void main(String[] args) {SpringApplication.run(ReadlistApplication.class, args);}}
bootstrap心得體會,然后在IDEA啟動應用,一個web應用就起來了。默認插件服務器是tomcat,端口是8080.從中我們可以看到依賴是多么的簡潔,只要一個約定好的起步依賴就好了。
其中啟動引導注解:@SpringBootApplication,其包含三部分
- @Configuration。作用是告訴spring用基于java的配置,即java config
- @ComponentScan。開啟組件掃描
- @EnableAutoConfiguration。開啟自動配置,自動配置bean依賴的jar(自動配置是通過@Conditional 去關聯的,條件滿足就注入相關的依賴,步步關聯jar)
三、配置的設置方式
- 命令行參數
- java:comp/env里的JNDI屬性配置文件
- JVM系統屬性
- 操作系統環境變量
- random.*前綴屬性
- 應用程序以外的 application.properties,.application.yml文件
- 打包在應用程序內的 application.properties,.application.yml文件
- 通過PropertySource標注的屬性源
- 默認屬性
優先級從高到低,1優先級最高,高優先級的可以覆蓋低優先級的屬性值。
另外 兩個默認加載的兩個文件(application.properties,.application.yml)能放在以下四個位置,優先級從高到低
- 外置,在相對于應用程序運行目錄的 /config 目錄下
- 外置,在應用程序運行目錄下
- 內置,classpath的/config目錄下
- 內置,classpath目錄下
java程序設計讀書筆記?其它名稱的屬性文件,比如xx.properties文件,也可以放到以上四個位置加載,優先級一樣,但是需要用到@PropertySource("xx")加載,比如@PropertySource("classpath:aa.properties"),這個注解不能加載yml文件
xml文件需要使用@ImportResource加載
同一優先級同時有application.properties,.application.yml,那么application.yml的優先級更高
有兩種方式引用屬性值: @ConfigurationProperties("prefix")和@Value("key")
四、端點度量
python讀書筆記,訪問地址:http://localhost:8080/actuator/health
spring boot 2.x 以上默認只加載了 info / health 其他端點需要在配置文件中開啟: management.endpoints.web.exposure.include=*
各端點功能如下: beans:看到依賴 conditions:自動配置報告,依賴的匹配條件 env:查看屬性值,password、secret、key的值會*號屏蔽顯示。后面加屬性key可以查看單個屬性值,例如env/server.port mapping:查看映射 metrics:度量信息。運行時數據 trace:跟蹤web請求,查看請求頭信息 dump:線程活動 health:服務的健康狀態,健康指示器
shutdown:關閉運行中的應用程序,默認關閉 management.endpoint.shutdown.enabled=ture開啟
除了REST獲取端點信息,端點可以用shell,MBean查看端點信息
可以定制actuator,返回需要的健康信息, 也可以改變端點的id,啟用或者禁用端點 management.context-path=/actuator 設置端點的根目錄,2.x以上似乎已經加上了/actuator
五、單元測試
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = ReadlistApplication.class)
@WebAppConfiguration
public class ReadlistApplicationTests {@Testpublic void contextLoads() {}
}
@RunWith(SpringJUnit4ClassRunner.class):引入Spring對JUnit4的支持。 @SpringBootTest(classes = ReadlistApplication.class):加載應用程序上下文。 @WebAppConfiguration:開啟WEB應用的配置,用于模擬ServletContext。