【Spring Boot】Spring Boot 屬性配置和使用
Spring Boot 屬性配置和使用
spring Boot 允許通過外部配置讓你在不同的環境使用同一應用程式的程式碼,簡單說就是可以通過配置檔案來注入屬性或者修改預設的配置。
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
命令列引數
通過Java -jar
app.jar --name="Spring" --server.port=9090
方式來傳遞引數。
引數用--xxx=xxx
的形式傳遞。
可以使用的引數可以是我們自己定義的,也可以是Spring Boot中預設的引數。
很多人可能會關心如web埠如何配置這樣的問題,這些都是Spring Boot中提供的引數,部分可用引數如下:
# LOGGING
logging.path=/var/logs
logging.file=myapp.log
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.port=8080
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 '/'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
更多常見的應用屬性請瀏覽這裡
注意:命令列引數在app.jar
的後面!
可以通過SpringApplication.setAddCommandLineProperties(false)
禁用命令列配置。
Java系統屬性
注意Java系統屬性位置java -Dname="isea533" -jar app.jar
,可以配置的屬性都是一樣的,優先順序不同。
例如java -Dname="isea533" -jar app.jar --name="Spring!"
中name
值為Spring!
作業系統環境變數
配置過JAVA_HOME的應該都瞭解這一個。
這裡需要注意的地方,有些OS可以不支援使用.
這種名字,如server.port
,這種情況可以使用SERVER_PORT
來配置。
具體名字如何匹配,看本文後面。
RandomValuePropertySource
系統中用到隨機數的地方,例如:
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
random.int*
支援value
引數和,max
引數,當提供max
引數的時候,value
就是最小值。
應用配置檔案(.properties或.yml)
在配置檔案中直接寫:
name=Isea533
server.port=8080
- 1
- 2
- 1
- 2
.yml
格式的配置檔案如:
name: Isea533
server:
port: 8080
- 1
- 2
- 3
- 1
- 2
- 3
當有字首的情況下,使用.yml
格式的配置檔案更簡單。關於.yml
配置檔案用法請看這裡
注意:使用.yml
時,屬性名的值和冒號中間必須有空格,如name:
Isea533
正確,name:Isea533
就是錯的。
屬性配置檔案的位置
spring會從classpath下的/config
目錄或者classpath的根目錄查詢application.properties
或application.yml
。
/config
優先於classpath根目錄
@PropertySource
這個註解可以指定具體的屬性配置檔案,優先順序比較低。
SpringApplication.setDefaultProperties
例如:
SpringApplication application = new SpringApplication(Application.class);
Map<String, Object> defaultMap = new HashMap<String, Object>();
defaultMap.put("name", "Isea-Blog");
//還可以是Properties物件
application.setDefaultProperties(defaultMap);
application.run(args);
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
應用(使用)屬性
@Value(“${xxx}”)
這種方式是最簡單的,通過@Value
註解可以將屬性值注入進來。
@ConfigurationProperties
Spring Boot 可以方便的將屬性注入到一個配置物件中。例如:
my.name=Isea533
my.port=8080
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
對應物件:
@ConfigurationProperties(prefix="my")
public class Config {
private String name;
private Integer port;
private List<String> servers = new ArrayList<String>();
public String geName(){
return this.name;
}
public Integer gePort(){
return this.port;
}
public List<String> getServers() {
return this.servers;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
Spring Boot 會自動將prefix="my"
字首為my
的屬性注入進來。
Spring Boot 會自動轉換型別,當使用List
的時候需要注意在配置中對List
進行初始化!
Spring Boot 還支援巢狀屬性注入,例如:
name=isea533
jdbc.username=root
jdbc.password=root
...
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
對應的配置類:
@ConfigurationProperties
public class Config {
private String name;
private Jdbc jdbc;
class Jdbc {
private String username;
private String password;
//getter...
}
public Integer gePort(){
return this.port;
}
public Jdbc getJdbc() {
return this.jdbc;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
jdbc
開頭的屬性都會注入到Jdbc
物件中。
在@Bean方法上使用@ConfigurationProperties
例如:
@ConfigurationProperties(prefix = "foo")
@Bean
public FooComponent fooComponent() {
...
}
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Spring Boot 會將foo
開頭的屬性按照名字匹配注入到FooComponent
物件中。
屬性佔位符
例如:
app.name=MyApp
app.description=${app.name} is a Spring Boot application
- 1
- 2
- 1
- 2
可以在配置檔案中引用前面配置過的屬性(優先順序前面配置過的這裡都能用)。
通過如${app.name:預設名稱}
方法還可以設定預設值,當找不到引用的屬性時,會使用預設的屬性。
由於${}
方式會被Maven處理。如果你pom繼承的spring-boot-starter-parent
,Spring
Boot 已經將maven-resources-plugins
預設的${}
方式改為了@
@
方式,例如@[email protected]
。
如果你是引入的Spring Boot,你可以修改使用其他的分隔符
通過屬性佔位符還能縮短命令引數
例如修改web預設埠需要使用--server.port=9090
方式,如果在配置中寫上:
server.port=${port:8080}
- 1
- 1
那麼就可以使用更短的--port=9090
,當不提供該引數的時候使用預設值8080
。
屬性名匹配規則
例如有如下配置物件:
@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
private String firstName;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
firstName
可以使用的屬性名如下:
person.firstName
,標準的駝峰式命名person.first-name
,虛線(-
)分割方式,推薦在.properties
和.yml
配置檔案中使用PERSON_FIRST_NAME
,大寫下劃線形式,建議在系統環境變數中使用
屬性驗證
可以使用JSR-303
註解進行驗證,例如:
@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
@NotNull
private InetAddress remoteAddress;
// ... getters and setters
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
最後
關於Spring Boot更多的內容可以繼續關注本部落格。
相關推薦
【Spring Boot】Spring Boot 屬性配置和使用
Spring Boot 屬性配置和使用 spring Boot 允許通過外部配置讓你在不同的環境使用同一應用程式的程式碼,簡單說就是可以通過配置檔案來注入屬性或者修改預設的配置。 Spring Boot 系列 Spring Boot 支援多種外部配置方式 這些方式
【日常錯誤】spring-boot配置文件讀取不到
無法 pan factory sdn 一個 pre nco span xxx 最近在用spring-boot做項目時,遇到自定義的配置文件無法讀取到的問題,通過在appcation.java類上定義@PropertySource(value = {"classpath:XX
【spring-boot】spring-boot-配置嵌入式Servlet容器學習
8、配置嵌入式Servlet容器SpringBoot預設使用Tomcat作為嵌入式的Servlet容器;問題?1)、如何定製和修改Servlet容器的相關配置;1、修改和server有關的配置(ServerProperties【也是EmbeddedServletContain
Spring Boot 屬性配置和使用
系統環境 itl class location web ron hashmap 驗證 ssp spring Boot 允許通過外部配置讓你在不同的環境使用同一應用程序的代碼,簡單說就是可以通過配置文件來註入屬性或者修改默認的配置。 Spring Boot 系列
【spring Boot】Spring中@Controller和@RestController之間的區別
處理 public 不同 esp 舉例 rest control tro adding spring Boot入手的第一天,看到例子中的@RestController ............. 相同點:都是用來表示Spring某個類的是否可以接收HTTP請求 不同點:@C
【spring Boot】spring boot獲取資源文件的三種方式【兩種情況下】
不用 ash 12c ica pla bsp foreach set 使用 首先聲明一點,springboot獲取資源文件,需要看是 1》從spring boot默認的application.properties資源文件中獲取 2》還是從自定義的資源文件中獲取
spring boot框架學習8-【幹貨】spring boot的web開發(4)-自定義攔截器處理權限
凱哥spring boot spring boot框架 本章節主要內容:通過前面的學習,我們了解並快速完成了spring boot第一個應用。spring boot企業級框架,那麽spring boot怎麽讀取靜態資源?如js文件夾,css文件以及png/jpg圖片呢?怎麽自定義消息轉換器呢?怎麽自定
【備忘】spring boot 和netty 實現聊天工具 從開發到部署實戰
一: 課程概要 二: netty初識及BIO、NIO、AIO等執行緒模型 三: netty編寫簡單伺服器及channel詳解 四: netty與hbuilder開發websocket伺服器 五: H5與MUI構建移動端app 六: 資料庫設計及整合Springboot MyB
Spring boot 梳理 - Spring Boot 屬性配置和使用(轉)
轉:https://blog.csdn.net/isea533/article/details/50281151 Spring Boot 支援多種外部配置方式,這些方式優先順序如下: 命令列引數 來自java:comp/env的JNDI屬性 Java系統屬性(Syste
【spring-boot】spring aop 面向切面程式設計初接觸
眾所周知,spring最核心的兩個功能是aop和ioc,即面向切面,控制反轉。這裡我們探討一下如何使用spring aop。 1.何為aop aop全稱Aspect Oriented Programming,面向切面,AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個
【備忘】Spring Boot從前端到後臺打造企業級部落格全棧實戰視訊
第1章 Spring Boot 簡介 第2章 開啟 Spring Boot 的第一個 Web 專案 第3章 一個Hello World專案 第4章 開發環境的搭建 第5章 整合Thymeleaf模版引擎 第6章 資料持久化Spring Data
【Spring Cloud】spring boot搭建+swagger-ui
spring boot 搭建restful介面專案 spring cloud 系列 環境: jdk1.8、maven3.x 、IDEA 簡介 搭建專案 1、新建專案 新建完成專案 新建類
【新手須知】Spring Boot 2.0.0 + MyBatis + Shiro + Swagger 開發專案踩坑記錄
寫在前面 Swagger 2.8.0 Spring Boot 2.0.0.RELEASE Shiro 1.4.0 Mybatis 1.3.1 填坑 踩坑一: MyBatis xml檔案
【spring-boot】spring-boot-Docker
五、Docker1、簡介Docker是一個開源的應用容器引擎;是一個輕量級容器技術;Docker支援將軟體編譯成一個映象;然後在映象中各種軟體做好配置,將映象釋出出去,其他使用者可以直接使用這個映象;執行中的這個映象稱為容器,容器啟動是非常快速的。2、核心概念docker主機
【十九】Spring Boot 之多資料來源和分散式事務(JTA、Atomikos、Druid、Mybatis)
1.事務開始 2.A資料來源insert 3.B資料來源insert 4.報錯 5.事務回滾(A、B資料來源都回滾) 專案目錄 pom.xml <?xml version="1.0" encoding="UTF-8"?> <projec
【十七】Spring Boot 之 多資料來源(擴充套件AbstractRoutingDataSource類,實現動態資料來源。使用AOP註解動態切換資料來源)
在一個專案中操作多個不同的資料來源時,需要用到多資料來源的配置。 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0
【Spring Boot】Spring Boot
Spring Boot - 配置排序依賴技巧 Spring Boot 系列 Spring Boot - 被錯誤使用的註解 我自己曾經在 spring Boot 中整合通用 Mapper 時,寫過下面的程式碼: @Configuration @AutoConfigur
【Redis系列】Spring boot實現監聽Redis key失效事件
> talk is cheap, show me the code. ## 一、開啟Redis key過期提醒 - 方式二:修改配置檔案 `redis.conf` ``` # 預設 notify-keyspace-events "" notify-keyspace-events Ex
【Spring Security】七、RememberMe配置
rop 基於 fig mep alias tom 保存 統一 source 一、概述 RememberMe 是指用戶在網站上能夠在 Session 之間記住登錄用戶的身份的憑證,通俗的來說就是用戶登陸成功認證一次之後在制定的一定時間內可以不用再輸入用戶名和密碼進行自動登錄
【Spring註解】3、屬性賦值
1、@Value 配置檔案 person.properties: person.nickName=張三 person.age=20 實體類 Person.java: @Data @AllArgsConstructor @NoArgsConstructor public class