簡體   English   中英

使用 Java 中的占位符解析 yaml

[英]Parse a yaml with placeholder in Java

我有一個 yaml 文件,其中包含要從環境變量中獲取的占位符。 我想將其解析為自定義 class。 目前我正在使用snakeyaml 庫來解析它並正確填充bean,如何使用snakeyaml 或Java 中的任何其他庫來解析環境變量。

datasource:
  url: {url_environment_variable}
  foo: bar
  username: {user_name_environment_variable}
  password: {password_environment_variable}

@Getter
@Setter
public class DataSource {
private String url;
private String foo;
private String username;
private String password;
}

下面解析代碼

Constructor c = new Constructor(MyDataSource.class);
Yaml yaml = new Yaml(c);
MyDataSource myData = yaml.loadAs(inputStream, MyDataSource.class);

問題是我還沒有找到解決占位符的方法。 人們能夠使用 python 解決它,並且有問題 - How to replace environment variable value in yaml file to be parsed using python script

我怎樣才能在 Java 中做同樣的事情。 如果需要,我可以添加新的依賴項。 PS - 它不是 Spring 引導項目,因此不能使用標准 Spring 占位符替換。

最簡單的方法是分兩次完成。 首先反序列化為MyDataSource ,就像你已經在做的那樣。 然后使用反射遍歷實例的所有字段,如果值以花括號開頭並以1結尾,則提取鍵,並從System.getenv map中獲取值。 請參閱此答案以獲取代碼。

如果你想一次性完成,那么你需要使用snakeyaml 事件驅動解析器。 對於每個鍵,您按照上述方法解析值,然后根據鍵名稱,使用反射或簡單的 if-else 設置MyDataSource中的相應字段。 有關事件驅動解析器的示例,請參閱此 class 它不是 Java,而是 Kotlin,但它可能是您能找到的唯一 JVM 語言示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM