一嫉称、導(dǎo)航
本節(jié)內(nèi)容簡介:
1. 配置介紹
2. 配置隨機值
3. 訪問命令行屬性杆勇,jar包代碼結(jié)構(gòu)
4. 不同環(huán)境的配置文件
5. 配置文件中的占位符
6. 使用YAML代替properties
一陵叽、 配置介紹
spring boot 可以有多種方法來實現(xiàn)對配置的自定義,我們需要知道有哪些配置的方式,順序是怎么樣的
配置順序(優(yōu)先級循序即優(yōu)先級高的可以覆蓋低的):
- 命令行參數(shù)
- 來自java的JNDI屬性
- java系統(tǒng)屬性(System.properties)
- 操作系統(tǒng)環(huán)境變量
- random.*里包含的屬性(RandomValuePropertySource)
- 在打包jar外的應(yīng)用配置文件(application.properties,YAML)
- 在打包jar內(nèi)的應(yīng)用配置文件(application.properties,YAML)
- 在@Configuration配置的
- spring boot默認屬性
注意:
- spring boot 可以在啟動的時候動態(tài)修改配置文件內(nèi)容,包括自定義內(nèi)容
- jar 打包外部配置文件可以覆蓋jar內(nèi)的配置文件
二只锭、配置隨機值
隨機值使用情況
- 隨機值可以在訪問頁面的時候帶上,防止緩存院尔,
- 在某些需要測試數(shù)據(jù)每次不一致的時候使用
- 也可以從當UUID
在配置文件中加如下配置
server.port=8081
server.context-path=/boot
number=${random.int}
在昨天的測試類中繼續(xù)添加測試方法
package com.likeoak.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 測試Controller
* The type Test controller.
*/
@RestController
public class TestController {
@Value("${number}")
private Integer number;
/**
* 返回 String 字符串蜻展,訪問成功,返回“test ok”
* Test string.
*
* @return the string
*/
@RequestMapping("/test")
public String test(){
return "test ok!";
}
/**
* 測試隨機返回一個整數(shù)
* Test random int integer.
*
* @return the integer
*/
@RequestMapping("/testRandomInt")
public Integer testRandomInt(){
return number;
}
}
啟動召边,訪問http://localhost:8081/boot/testRandomInt
結(jié)果:
1574663730
配置隨機值铺呵,可以配置的情況
- 隨機整數(shù)(int)
- 隨機范圍內(nèi)的整數(shù)
- 隨機long整數(shù)
- 隨機字符串
在配置文件中添加如下屬性
//隨機整數(shù)
number=${random.int}
//隨機小于10的整數(shù)
numberLessThan=${random.int(10)}
//隨機10-100整數(shù)
numberRange=${random.int(10,100)}
//隨機long
longNumber=${random.long}
//隨機字符串
randomStr=${random.value}
在測試類中繼續(xù)添加如下方法
@RequestMapping("/testRandom")
public String testRandom(){
StringBuilder builder = new StringBuilder();
builder.append("隨機返回值:{");
builder.append(" 隨機整數(shù):"+number );
builder.append(" 隨機小于10的整數(shù):"+numberLessThan );
builder.append(" 隨機10-100的整數(shù):"+numberRange );
builder.append(" 隨機long:"+longNumber );
builder.append(" 隨機字符串:"+randomStr +"}");
return builder.toString();
}
啟動,訪問:http://localhost:8081/boot/testRandom
結(jié)果:隨機返回值:{ 隨機整數(shù):905599732 隨機小于10的整數(shù):0 隨機10-100的整數(shù):26 隨機long:-8568292958322258583 隨機字符串:1a4b7f3091807cee19a44a18f08caae5}
三隧熙、訪問命令行屬性片挂,jar包代碼結(jié)構(gòu)
- 對當前程序用maven打包,即使用mvn clean , mvn package命令
- 打包之后在項目的target目錄中贞盯,可以看到打包好的jar包
[圖片上傳失敗...(image-5063dc-1524582956743)]
默認情況下音念,spring boot可以執(zhí)行任何以--開頭的參數(shù),如 --server.port=8081
執(zhí)行:
java -jar SpringApplicationIntroduce-1.0.0.jar --server.port=8082
執(zhí)行結(jié)果:
可以看到躏敢,端口已經(jīng)被覆蓋闷愤,變?yōu)?082了
在target目中我們還看到一個SpringApplicationIntroduce-1.0.0.jar.original文件,這個文件可以看到這個jar包結(jié)構(gòu)件余,執(zhí)行以下命令
jar tvf SpringApplicationIntroduce-1.0.0.jar.original
目錄結(jié)構(gòu):
[圖片上傳失敗...(image-6487e1-1524582956743)]
jar包主要有三層目錄
org
METE-INF
BOOT-INF
- 其中org目錄中包含spring boot加載的依賴包
- METE-INF包中主要是spring boot 啟動配置
特別注意MANIFEST.MF 配置:
Manifest-Version: 1.0
Implementation-Title: SpringApplicationIntroduce
Implementation-Version: 1.0.0
Archiver-Version: Plexus Archiver
Built-By: SEELE
Implementation-Vendor-Id: com.likeoak
Spring-Boot-Version: 1.5.2.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.likeoak.App
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.2.5
Build-Jdk: 1.8.0_121
Implementation-URL: http://maven.apache.org
可以看到打包的信息讥脐,還可以看到啟動主類,版本信息等
有時候啟動報錯啼器,找不到主類旬渠,就可以看看這個配置文件是否打包正確
- BOOT-INF為我們自己寫的代碼及配置文件
四、不同環(huán)境的配置文件
一般我們開發(fā)有開發(fā)環(huán)境端壳,測試有測試環(huán)境告丢,生產(chǎn)有生產(chǎn)環(huán)境,我們應(yīng)該把配置文件分開损谦,分開規(guī)則是:
application-{profile}.properties
如:
- 生產(chǎn) application-prod.properties
- 測試 application-test.properties
然后在application.properties中指定環(huán)境
spring.profiles.action=prod
五岖免、配置文件中的占位符
在一個配置文件中,如果有共同屬性照捡,我們可以提取出來用占位符
如:
app.name=aaa
app.description=${app.name} is a Spring Boot application
這里在app.description中${app.name}就是占位符颅湘,就會被替換成aaa
六、使用YAML代替properties
YAML是JSON的一個超集栗精,也是一種方便的定義層次配置數(shù)據(jù)的格式栅炒。spring boot 可以使用YAML替代properties文件
- 普通替代
如:
在properties中
environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App
在YAML中
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: My Cool App
- YAML列表
如:
my:
servers:
- dev.bar.com
- foo.bar.com
變成properties就變?yōu)橐韵赂袷?/p>
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com
- YAML 多環(huán)境可以使用同一配置文件
如:
server:
address: 192.168.1.100
---
spring:
profiles: development
server:
address: 127.0.0.1
---
spring:
profiles: production
server:
address: 192.168.1.120
如果在上面配置文件中在配置spring.profiles.action=production,那么 server.address=192.168.1.120 就會被激活
如果沒有配置,就會默認使用server.address=192.168.1.100