程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 附 5 springboot之配置文件,springboot配置文件

附 5 springboot之配置文件,springboot配置文件

編輯:JAVA綜合教程

附 5 springboot之配置文件,springboot配置文件


本文轉載自http://www.jianshu.com/p/80621291373b,作者:龍白一夢 我的boss

代碼從開發到測試要經過各種環境,開發環境,測試環境,demo環境,線上環境,各種環境的配置都不一樣,同時要方便各種角色如運維,接口測試, 功能測試,全鏈路測試的配置,hardcode 肯定不合適,如Spring profile一樣寫在jar包不合適.分布式應用中一般采用集中管理配置的方式,通過使用開源軟件,如阿裡的diamond,netflix的consul等等,SpringBoot中提供了各種各樣的配置方式,下面一一來分析下.

1.配置方式和優先級

這些方式優先級如下:
a. 命令行參數
b. 來自java:comp/env的JNDI屬性
c. Java系統屬性(System.getProperties())
d. 操作系統環境變量
e. RandomValuePropertySource配置的random.*屬性值
f. jar外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
g. jar內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
h. jar外部的application.properties或application.yml(不帶spring.profile)配置文件
i. jar內部的application.properties或application.yml(不帶spring.profile)配置文件
j. @Configuration注解類上的@PropertySource
k. 通過SpringApplication.setDefaultProperties指定的默認屬性

2.命令行參數

@Componentpublic 
class UserProperties {  
    @Value("${myname}")  
    private  String myname;
}

啟動命令: java -jar *.jar --myname="KevinSun"
其他java 系統屬性, 操作系統屬性都是類似處理方案如果不想通過命令行啟動 可以用下面方法取消.

SpringApplication.setAddCommandLineProperties(false);

3. application-{profile}.properties參數加載

不同的環境可能需要不同配置,可以通過
application{profile}.properties來解決這個問題.
首先:新建application-dev..properties 文件,增加需要參數其次啟動命令:

  java -jar  ***.jar  --spring.profiles.active=dev

application-{profile}.properties 文件和默認的application.properties的加載方式本質是一致的,可以參照4中的內容.需要注意的是:application.properties 會首先被加載.

然後:從application-{profile}.properties中獲取替換,所以一些基本固定的值可以寫在application.properties, 然後個性化配置寫在application-{profile}.properties中。

具體用法參照我的:第十四章 springboot + profile(不同環境讀取不同配置)

4.application.properties 參數加載

SpringBoot中默認的從application.properties文件中加載參數,大量情況下默認是寫在這個文件中的.
a. application.properties 讀取的優先級
i. file:./config/ 當前jar目錄的config
ii. file:./ 當前jar目錄
iii. classpath:/config/ jar包中classpath的 config目錄下
iv. classpath:/ jar包中classpath 路徑下
排列的順序 就是 加載的優先級,application.properties只會被加載一次
b. 使用自定義文件
如果你覺得 application.properties不夠酷,你可以定義自己的文件名, 這裡也有兩種方式
i. 使用命令

  java -jar  ***.jar --spring.config.name=myproject

這時就會加載myproject.propertie並且 application.properties不會被加載的.
ii. 使用命令

 java -jar  ***.jar  spring.config.location=classpath:/myproject.properties

這種情況下 application.properties也是會被加載,使用方式application-{profile}.properties相同.
c. 使用${}進行屬性占位符替換

spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234
spring.data1.mongodb.host=${spring.data.mongodb.host}_test
spring.data1.mongodb.port=${spring.data.mongodb.port}_test
spring.data1.mongodb.database=${random.value}_test

注意最後一個配置,這使用random 生產隨機值的方式, 在測試中可以用來造數據。
d. 類型安全加載
使用@value 進行屬性的注入有的時候可能比較笨重, spring 提供一種強類型的bean 來替代這種方式

@Configuration
@EnableConfigurationProperties(UserProperties.class)
public class MyConfiguration{

}
@Component
@ConfigurationProperties(prefix = "spring.data.mongodb")
public class UserProperties {
    private  String host;
    private  int prot;

}
spring.data.mongodb.host=192.168.1.1
spring.data.mongodb.port=1234

文/龍白一夢(簡書作者)
原文鏈接:http://www.jianshu.com/p/80621291373b
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved