springboot 第一篇 (核心)
1.1基本配置
1.1.1 入口類和@SpringBootApplication
@SpringBootApplication 註解組合了@EnableAutoConfiguration 、@ComponentScan、@Configuration; 若不是用@SpringBootApplication 註解,則可以在入口類上直接使用 @EnableAutoConfiguration 、@ComponentScan 和 @Configuration 。
其中, @EnableAutoConfiguration 讓 Spring Boot 根據類路徑中的jar包依賴為當前專案進行自動配置。
Spring Boot 會自動掃描 @SpringBootApplication 所在類的同級包,以及下級裡的 Bean (若為 JPA 專案還可以掃描標註 @Entity 的實體類)。建議入口類放置的位置在 groupId + arctifactId 組合的包名下。
1.1.2 關閉特定的自動配置
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
1.1.3 定製 Banner
1、修改 Banner
在src/main/resources 下建立banner.txt , 在 http://patorjk.com/software/taag 網站生成字元,貼上複製到banner.txt 中。
2、關閉 banner
(1)main 裡的內容修改為:
SpringApplication app = new SpringApplication(GatewayApplication.class);
app.setShowBanner(false);
app.run(args);
(2)或使用fluentAPI修改為:
new SpringApplicationBuilder(GatewayApplication.class).showBanner(false).run(args);
1.1.4 Spring Boot 的配置檔案
Spring Boot 使用一個全域性的配置檔案 application.properties 或是 application.yml ,放置在 src/main/resources 目錄或者類路徑的 /config 下。
1.1.5 使用 xml 配置
Spring Boot 提倡零配置 ,即無 xml 配置,但是在實際專案中,可能有一些特殊要求你必須使用xml 配置,這時我們可以通過 Spring 提供的 @ImportResource 來載入 xml 配置。
@ImportResource({"calsspath:some-context.xml","classpath:another-context.xml"})
1.2外部配置
Spring Boot 允許使用 properties 檔案、yaml 檔案或者命令列引數作為外部配置。
6.2.1 命令列引數配置
打成jar包的命令:
java -jar xxx.jar
修改埠號:
java -jar xxx.jar --server.port=9090
1.2.2 常規屬性配置
在 Spring Boot 裡,我們只需要在application.properties 定義屬性,直接使用 @Value 注入即可。
(1)在 application.properties 定義屬性
book.author = xxx;
book.name = yyy;
(2) 修改入口類
@SpringBootApplication
public class AuthServerApplication {
@Value("${book.author}")
private String bookAuthor;
@Value("{book.name}")
private String bookName;
@RequestMapping("/")
String.index(){
return "book name is:" + bookName + "and book author:" + bookAuthor;
}
public static void main(String[] args) {
SpringApplication.run(AuthServerApplication.class, args);
}
}
1.2.3 型別安全的配置(基於properties)
通過 @ConfigurationProperties 將 properties 屬性和一個Bean 以及屬性關聯,從而實現型別安全的配置。
(1)、在 application.properties 上新增
author.name = ccc
anthor.age = 22
(2) 、在Bean 類中
@Compent
@ConfigurationProperties(prefix = "author")
public class Bean {
private String name;
private Integer age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
程式碼解釋:
通過 @ConfigurationProperties 載入 properties 檔案內的配置,通過 prefix 屬性指定 properties 的配置的字首,通過 locations 指定 properties 檔案的位置。
例如 @ConfigurationProperties(prefix = "author" ,locations = "classpath:config/author.properties")
1.2.4 日誌配置
Spring Boot 支援 Java Util Logging 、Log4j 、Log4J2 和 Logback 作為日誌框架,無論使用哪種日誌框架,Spring Boot已為當前使用日誌框架的控制檯和控制檯的輸出以及檔案輸出做好了配置。
Spring Boot 預設是 使用 Logback 作為日誌框架。
日誌級別從低到高分為:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL 。
配置 logging.file ,會在專案的當前路徑下生成一個 xxx.log 日誌檔案。
logging.file = D:/log/log.log
所有支援的日誌記錄系統都可以在Spring環境中設定記錄級別(例如在application.properties中)
格式為:'logging.level.* = LEVEL'
logging.level:日誌級別控制字首,*為包名或Logger名
LEVEL:選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
1.2.5 Profile 配置
Profile 是Spring 用來針對不同的環境對不同的配置提供支援的,全域性 Profile 配置使用 application-{ profile }.properties
1.3 Spring Boot 執行原理
通過以下方式來檢視當前專案中已啟動和未啟動的自動配置的報告。
(1)、執行jar 時增加 --debug 引數:
java -jar xx.jar --debug
(2)、在 application.properties 中設定屬性:
debug = true
1.3.1 運作原理
關於 Spring Boot 的運作原理 ,@SpringBootApplication 這個註解是一個組合註解,它的核心功能是由 @EnableAutoConfiguration 註解提供的。
@EnableAutoConfiguration 註解的原始碼:
這裡的關鍵功能是 @Import 註解匯入的配置功能 ,AutoConfigurationImportSelector 使用 SpringFactoriesLoader.loadFactoryNames 方法來描述具有 META-INF/spring.factories 檔案的jar包。
1.3.2 核心註解
在 下
這些註解組成了 @Conditional 註解 , 只是使用了不同的條件(Condition)。