MySQL InnoDB Online DDL學習--轉發
1、SpringBoot配置檔案
SpringBoot
配置檔案,對於SpringBoot
的預設配置來說,如果預設配置不適用實際運用的場景情況下,可以使用配置檔案覆蓋預設配置,比如內嵌的Tomcat
預設埠是8080
,就可以使用配置檔案將預設配置覆蓋。另外我們在專案中,有可能封裝一些通用SDK,也可以使用配置檔案來處理。
SpringBoot
支援的配置可以檢視官網文件:application-properties
SpringBoot
提供了兩種配置檔案型別:properties
和yml
(而yml
也可以寫成yaml
)。預設配置檔名稱為:application
,放在resources
目錄下。這兩種配置檔案在同一級的優先順序為:properties
yml
>yaml
比如把預設埠改為8088
,上面訪問路徑為http://localhost:8080/v1/index
,按照之前的習慣,通常是主機後面會跟專案名,也可以通過配置檔案配置。
使用yaml
方式配置:
server:
servlet:
context-path: /spring-boot
port: 8088
注意:
yaml
的配置方式:
號後面必須有空格。
簡單介紹下yaml
的基本語法:
- 大小寫敏感
- 資料值前面必須有空格(也就是
:
號後面),作為分隔符 - 使用縮排表示層級關係
- 縮排時不允許使用
Tab
鍵,只允許使用空格(因為各個系統Tab
對應的空格數目可能不同,導致層級混亂) - 縮排的空格數目不重要,只要相同層級的元素左對齊就行
#
表示註釋,從這個字元到行尾,都會被解析器忽略
yaml
的資料格式:
- 物件(map): 鍵值對的集合
person:
name: lisi
# 行內寫法
person: {name: lisi}
- 陣列:一組按次排列的值
names:
- zhangsan
- lisi
# 行內寫法
names: [zhangsan,lisi]
- 純量:單個的、不可再分的值
msg1: `hello \n world` #單引號忽略轉義字元
msg2: "hello \n world" #雙引識別轉義字元
yaml
引數引用:
有時候在配置一個引數,想被多個地方引用,可以這樣配置:
name: zhangsan
person:
name: ${name} #引用上面定義的name的值
使用properties
配置:
server.servlet.context-path=/spring-boot
server.port=8088
注意:配置
context-path
必須是/
開頭
啟動專案從日誌輸出:
Tomcat started on port(s): 8088 (http) with context path '/spring-boot'
這個時候我們的訪問路徑就是:http://localhost:8088/spring-boot/v1/index
2、讀取配置內容
在實際開發時,有時候需要做一些初始化的自定義配置,那麼怎麼在程式碼裡面獲取到配置檔案的自定義配置,比如自定義配置name: zhangsan
。讀取配置內容有如下三種方式:
- 使用註解
@Value
@Value("${name:lisi}")
private String name;
@GetMapping(path = "")
public String index(){
return String.format("Hello %s Spring Boot!",name);
}
訪問結果:Hello zhangsan Spring Boot!
,使用@Value
註解就可以獲取配置檔案的自定義配置,:
後面表示預設值,如果配置檔案沒有配置,則取預設值。
- Environment
@Autowired
private Environment environment;
System.out.println(String.format("使用Environment獲取配置name:%s",environment.getProperty("name")));
輸出結果:使用Environment獲取配置name:zhangsan
- @ConfigurationProperties
定義一個User
類
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
private String name;
private int age;
private List<String> address;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}
必須使用@Component
和@ConfigurationProperties
註解,@Data
是使用了lombok
外掛。如果需要使用lombok
,需要在IDEA安裝Lombok
外掛,引入lombok
依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
配置檔案如下配置:
user:
name: zhangsan
age: 12
address:
- sichuang
- hunan
在controller
中使用
@Autowired
private User user;
System.out.println(user.toString());
輸出結果:User{name='admin', age=12, address=[sichuan, hunan]}
3、使用Profile多環境切換
在實際開發場景中,我們一般有開發、測試、生產環境,每個環節的某些配置會不一樣,那麼怎麼來解決不同環境配置的問題,下面詳細介紹使用Profile
多環境的切換。
profile
多環境配置方式:
- 多
profile
檔案的方式,提供多個配置檔案,每個檔案代表一種環境。- application-dev.properties/yml 開發環境
- application-test.properties/yml 測試環境
- application-prod.properties/yml 生產環境
yml
多文件方式:- 在yml配置檔案中使用
---
分割不同配置
- 在yml配置檔案中使用
profile
啟用多環境方式:
- 配置檔案,在配置檔案使用配置
spring.profiles.active=dev
- 虛擬機器引數:在
IDEA
的VM options
指定:-Dspring.profiles.active=dev
- 命令列引數:
- 打包情況下:
java -jar xxx.jar --spring.profiles.active=dev
- 使用
IDEA
下的Program arguments
指定:--spring.profiles.active=dev
- 打包情況下:
多檔案的方式這裡就不做操作了,上面介紹已經說明了,按照標準的檔案格式命名就行,根據實際情況選擇是用properties
還是yml
的方式。下面介紹下yml
多文件的方式:
# 開發環境
---
spring:
config:
activate:
on-profile: dev
server:
port: 8081
# 測試環境
---
spring:
config:
activate:
on-profile: test
server:
port: 8082
# 生產環境
---
spring:
config:
activate:
on-profile: prod
server:
port: 8082
---
# 公用配置
server:
servlet:
context-path: /spring-boot
至於啟用的方式,就參考上面的測試即可。