一起學(xué)JAVA之《spring boot》04 - spring boot 自定義(外化)配置

一嫉称、導(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)先級高的可以覆蓋低的):

  1. 命令行參數(shù)
  2. 來自java的JNDI屬性
  3. java系統(tǒng)屬性(System.properties)
  4. 操作系統(tǒng)環(huán)境變量
  5. random.*里包含的屬性(RandomValuePropertySource)
  6. 在打包jar外的應(yīng)用配置文件(application.properties,YAML)
  7. 在打包jar內(nèi)的應(yīng)用配置文件(application.properties,YAML)
  8. 在@Configuration配置的
  9. 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é)果:


--server.port

可以看到躏敢,端口已經(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赢赊,一起剝皮案震驚了整個濱河市乙漓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌释移,老刑警劉巖叭披,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玩讳,居然都是意外死亡涩蜘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門熏纯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來同诫,“玉大人,你說我怎么就攤上這事樟澜∥蠼眩” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵秩贰,是天一觀的道長霹俺。 經(jīng)常有香客問我,道長毒费,這世上最難降的妖魔是什么丙唧? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮觅玻,結(jié)果婚禮上想际,老公的妹妹穿的比我還像新娘。我一直安慰自己溪厘,他們只是感情好胡本,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桩匪,像睡著了一般打瘪。 火紅的嫁衣襯著肌膚如雪友鼻。 梳的紋絲不亂的頭發(fā)上傻昙,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音彩扔,去河邊找鬼妆档。 笑死,一個胖子當著我的面吹牛虫碉,可吹牛的內(nèi)容都是我干的贾惦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼须板!你這毒婦竟也來了碰镜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤习瑰,失蹤者是張志新(化名)和其女友劉穎绪颖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甜奄,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡柠横,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了课兄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牍氛。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烟阐,靈堂內(nèi)的尸體忽然破棺而出搬俊,到底是詐尸還是另有隱情,我是刑警寧澤曲饱,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布悠抹,位于F島的核電站,受9級特大地震影響扩淀,放射性物質(zhì)發(fā)生泄漏楔敌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一驻谆、第九天 我趴在偏房一處隱蔽的房頂上張望卵凑。 院中可真熱鬧,春花似錦胜臊、人聲如沸勺卢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黑忱。三九已至,卻和暖如春勒魔,著一層夾襖步出監(jiān)牢的瞬間甫煞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工冠绢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抚吠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓弟胀,卻偏偏與公主長得像楷力,于是被迫代替她去往敵國和親喊式。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容