在大部分情況下,我們不需要做太多的配置就能夠讓spring boot正常運行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。
Spring Boot 支持多種外部配置方式
這些方式優先級如下:
- 命令行參數
- 來自
java:comp/env
的JNDI屬性 - Java系統屬性(
System.getProperties()
) - 操作系統環境變量
RandomValuePropertySource
配置的random.*
屬性值jar
包外部的application-{profile}.properties
或application.yml
(帶spring.profile
)配置文件jar
包內部的application-{profile}.properties
或application.yml
(帶spring.profile
)配置文件jar
包外部的application.properties
或application.yml
(不帶spring.profile
)配置文件jar
包內部的application.properties
或application.yml
(不帶spring.profile
)配置文件@Configuration
注解類上的@PropertySource
- 通過
SpringApplication.setDefaultProperties
指定的默認屬性
命令行參數
?與類C語言一樣,main函數都可以傳入參數,這被稱為命令行參數。
比如配置文件配置服務端口好是:
server.port=8081
那么對應的命令行就是:
mvn?spring-boot:run?-Drun.arguments="--server.port=8081"
系統參數
系統參數也分為很多種的,首先如果是使用main方法的話。點擊run as選擇run config然后配置系統參數
可以使用的參數可以是我們自己定義的,也可以是Spring Boot中默認的參數。
很多人可能會關心如web端口如何配置這樣的問題,這些都是Spring Boot中提供的參數,部分可用參數如下:
logging.config= # location of config file (default classpath:logback.xml for logback)
logging.level.*= # levels for loggers, e.g. "logging.level.org.springframework=DEBUG" (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)
# EMBEDDED SERVER CONFIGURATION (ServerProperties)
server.address= # bind to a specific NIC
server.session-timeout= # session timeout in seconds
server.context-parameters.*= # Servlet context init parameters, e.g. server.context-parameters.a=alpha
server.context-path= # the context path, defaults to '/'
server.servlet-path= # the servlet path, defaults to '/'
如果我們是用mvn打包的話,
系統參數就配置在我們的mvaen里面。如果是用tomcat打包的話,
系統參數就配置在我們
的tomcat里面。
操作系統環境變量
配置過JAVA_HOME的應該都了解這一個。
這里需要注意的地方,有些OS可以不支持使用.
這種名字,如server.port
,這種情況可以使用SERVER_PORT
來配置。
具體名字如何匹配,看本文后面。
系統中用到隨機數的地方,例如:
這里需要注意的地方,有些OS可以不支持使用.這種名字,如server.port,這種情況可以使用SERVER_PORT來配置。
RandomValuePropertySource
my.secret=${random.value}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
random.int*支持value參數和,max參數,當提供max參數的時候,value就是最小值。
random.int*
支持value
參數和,max
參數,當提供max
參數的時候,value
就是最小值。
應用配置文件(.properties或.yml)
當我們創建一個springboot項目的時候,系統默認會為我們在src/main/Java
/resources目錄下創建一個application.properties。
或者application.yml。yml的語法比properties簡單,而且優先級要比proper高。建議使用yml;
先創建一個配置文件。
如果你需要讀取配置文件的值只需要加@Value(“${屬性名}”)
public class BookController {
@RequestMapping(value = "/book")
public String bookToString(){
return "圖書名稱:"+name+",圖書價格:"+":"+price;
這里直接訪問會出現
將配置文件的屬性賦給實體類
當我們有很多配置屬性的時候,這時我們會把這些屬性作為字段來創建一個javabean,并將屬性值賦予給他們。
@ConfigurationProperties(prefix = "book")
public String getName() {
public void setName(String name) {
public Double getPrice() {
public void setPrice(Double price) {
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
@EnableConfigurationProperties({Book.class})
public class BookController {
public String framework(ModelMap map) {
map.addAttribute("book",book);
return "freeMarker/book";
<h1>圖書名稱:${book.name}</h1>
<h1>圖書價格:${book.price}</h1>
最終結果圖:
這個只是最簡單的注入Spring Boot 會自動轉換類型,當使用List
的時候需要注意在配置中對List
進行初始化!
Spring Boot 還支持嵌套屬性注入
這里我們添加了一個地址集合,和一個嵌套類,管理員對象。
@ConfigurationProperties(prefix = "book")
private List<String> address=new ArrayList<>();
public Manage manage=new Manage();
public String getName() {
public void setName(String name) {
public Integer getAge() {
public void setAge(Integer age) {
public String toString() {
return "Manage [name=" + name + ", age=" + age + "]";
public String getName() {
public void setName(String name) {
public Double getPrice() {
public void setPrice(Double price) {
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
public List<String> getAddress() {
public void setAddress(List<String> address) {
public Manage getManage() {
public void setManage(Manage manage) {
記住,集合和對象一定要初始化,不然會報錯。Controller基本不變。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<h1>圖書名稱:${book.name}</h1>
<h1>圖書價格:${book.price}</h1>
<#list book.address as address>
<h2>管理員屬性:${book.manage}<h2>
屬性占位符
app.description=${app.name} is a Spring Boot application
可以在配置文件中引用前面配置過的屬性(優先級前面配置過的這里都能用)。
通過如${app.name:默認名稱}
方法還可以設置默認值,當找不到引用的屬性時,會使用默認的屬性。
由于{}方式改為了@ @方式,例如@name@。
如果你是引入的Spring Boot,你可以修改使用其他的分隔符
通過屬性占位符還能縮短命令參數
server.port=${port:7001}
屬性名匹配規則
例如有如下配置對象:
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
private String firstName;
firstName可以使用的屬性名如下:
person.firstName
,標準的駝峰式命名
person.first-name
,虛線(-)分割方式,推薦在.properties和.yml配置文件中使用
PERSON_FIRST_NAME
,大寫下劃線形式,建議在系統環境變量中使用