Spring Boot 針對經常使用的開發場景提供了一系列自動化配置來減小本來複雜而又幾乎不多改動的模板配置內容,可是,咱們仍是須要了解如何在Spring Boot中修改這些自動化的配置,以應對一些特殊場景 java
配置文件 spring
Spring Boot的默認配置文件位置爲 src/main/resources/application.properties ,關於 Spring Boot 應用的配置文件內容均可以在該文件中,根據咱們引入的不一樣模塊,能夠在這裏定義容器端口號、數據庫鏈接信息、日誌級別等各類配置信息,經常使用配置以下: 數據庫
自定義參數 app
除了能夠在Spring Boot的配置文件中設置各個模塊中預約義的配置屬性,也能夠在配置文件中定義一些咱們須要的自定義屬性,好比在配置文件中增長以下內容: 框架
book.name = springCloud dom
book.author=李四 工具
而後,能夠在應用中,經過@Value註解來加載這些自定義的參數,好比: 測試
@Component ui
public class Book { spa
@Value ("${book.name}")
private String name;
@Value ("${book.author}")
private String author;
}
@Value註解能夠支持兩種表達式來進行配置,以下所示:
經過自定義注入實體,就能夠讀取到配置屬性,示例代碼以下:
@RestController
@RequestMapping ("/hello")
public class HelloController {
@Autowired
private Book book;
@RequestMapping ("getCount")
public String getCount() {
return "ok " + book.getName();
}
}
參數引用
在 application.properties中的個參數之間能夠直接經過使用 PlaceHolder 的方式來進行引用,好比:
book.name=springCloud
book.author=李四
book.desc= 做者 ${book.author} 寫的 ${book.name}
使用隨機數
在一些特殊的狀況下,咱們但願有些參數每次被加載時候不是一個固定的值,好比密鑰、服務端口等,在Spring Boot 的屬性配置文件中,能夠使用${random}配置來產生隨機的int值、long值或者string字符串,這樣咱們就能夠很容易的經過配置隨機生成屬性,好比:
#-隨機生成8080-8090內的隨機數
server.port=${random.int(8080,8090)}
#--------------------------
#-隨機生成字符串
org.drsoft.random=${random.value}
#-隨機生成int
org.drsoft.random.int=${random.int}
#-隨機生成long
org.drsoft.random.long=${random.long}
#-隨機生成10之內的int
org.drsoft.random.intRagne=${random.int(10)}
#-機生成 uuid
命令行參數
使用命令 java -jar 來啓動的方式,該命令除了啓動應用外,還能夠在命令行中指定應用的參數,好比 java - jar xxx.jar --server.port=8090 直接以命令行的方式設置服務端口屬性,在用命令行方式啓動 Spring Boot應用時,連續的兩個減號就是對application.properties 中的屬性進行賦值的標識
多環境配置
多環境的配置,各類項目構建工具或是框架的基本思路是一致的,經過配置多份不一樣環境的配置文件,在經過打包命令指定須要打包的內容以後進行區分打包,在Spring Boot 中,多環境配置的文件名須要知足application-{profile}.properties 的格式,其中{profile}對應環境標識,以下:
至於具體哪一個配置文件會被加載,須要在 application.properties 文件中經過spring.profiles.action 屬性來設置,其值對應配置文件中的{profile} 值。
加載順序
爲了可以更合理的重寫各屬性的值,其Spring Boot 使用了下面這種較爲特別的屬性加載順序:
能夠看到其中標黃的都是從應用Jar包以外讀取配置文件,因此,實現外部化配置的原理就是今後切入,爲其指定外部配置文件的加載位置來取代Jar包以內的配置內容。