首頁 > 軟體

Springboot yml如何獲取系統環境變數的值

2022-02-16 22:00:03

yml獲取系統環境變數的值

注意,這裡說的是獲取系統環境變數的值,譬如Windows裡設定的JAVA_HOME之類的,可以直接在Springboot的組態檔中獲取。

我們經常使用一些docker管理平臺,如DaoCloud、rancher之類的,裡面都可以設定環境變數,目的當然也就是供程式獲取。使用環境變數的話,可以避免在application.yml裡直接明文編寫資料庫密碼、appkey之類的。

用法很簡單

譬如我係統環境變數裡,設定的有M2_HOME

那麼就可以在application.yml使用如下

maven:
  path: ${M2_HOME}

然後在程式碼裡就能根據maven.path取到環境變數設定的值了。

當然還有一些高階用法,譬如你忘了設定環境變數了,上面的寫法就取不到值了,可以使用

maven:
  path: ${M2_HOME:abc}

使用冒號分隔,當環境變數中M2_HOME為空時,就會使用abc來填充了。

通過上面的方式,就可以做到不明文編碼一些敏感密碼之類的,只設定在環境變數裡,就能避免所有開發人員看到了。 

另外加一個小的其他知識,就是如何給static屬性賦初值,之前都知道@Value是可以給普通變數賦值的,那麼static的需要用下面的方式。

@Component
public class StaticProperties { 
    public static String CUSTOM_NAME; 
    @Value("${custom.name}")
    public void setCustomName(String customName) {
        CUSTOM_NAME = customName;
    } 
}

讀取環境變數和設定資訊的方法

核心的組態檔讀取方式

核心組態檔是指在resources根目錄下的application.properties或application.yml組態檔,讀取這兩個組態檔的方法有兩種,都比較簡單。

例如,我的application.properties檔案中有如下內容:

local.ip=127.0.0.1
local.port=8080

使用Environment方式

@Component
public class UserConfig {
    @Autowired
    private Environment env;
    public void show(){
        System.out.println("local.ip="+env.getProperty("local.ip"));
    }
}

使用@Value方式(常用)

@Component
public class UserConfig {
    @Value("${local.port}")
    private String localPort;
    public void show(){
        System.out.println("localPort="+localPort);
    }
}

自定義檔案的讀取

有時候,因專案的需要,需要自定義組態檔來存放一些自定義的資訊(儘量不破壞核心檔案的原生態),比如,我們在

在resources/config目錄下建立組態檔hk.properties

resources/config/hk.properties內容如下:

name=hk
sex=1

建立管理設定的實體類:

@Component
@PropertySource(value = "classpath:config/hk.properties")
public class HKConfig {
    @Value("${name}")
    private String name;
    @Value("${sex}")
    private String sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

yml的組態檔

對於像如下結構的內容:

jdbc:
    name:hk
    password:123

對於這類,獲取方式和上面一樣,jdbc.name即可。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com