Java: загрузка данных в переменные из файла .yaml

#java #yaml

#java #yaml

Вопрос:

У меня есть Java-программа, которая должна подключаться к двум другим машинам (IP-адреса и порты известны) и выполнять задачу сравнения данных.

Вместо жесткого кодирования IP и порта в исходном файле Java я создал config.yaml файл и сохранил их там следующим образом, допустим, это контекст этого файла:

config.yaml:

 other machines:
  -"firstMachineAddress:162.242.195.82"
  -"secondMachineAddress:50.31.209.229"
  -"firstTargetPort:4041"
  -"secondTargetPort:4042"
  

Теперь я хочу загрузить эти значения в мой исходный файл Java и присвоить их уже созданным мной переменным, таким как:

sampleClass.java:

 // addresses of the machines which we will connect
    public final InetAddress firstMachineAddress = "";
    public final InetAddress secondMachineAddress = "";
    private final int firstTargetPort = "";
    private final int secondTargetPort = "";
  

Мне было интересно, предоставляет ли Java удобный способ достижения этого?

Комментарии:

1. джексон может сделать это за вас

2. также может быть выполнено в spring boot

3. jyaml.sourceforge.net/tutorial.html вы пробовали это.

Ответ №1:

https://github.com/FasterXML/jackson-dataformat-yaml

Скопируйте и вставьте ниже

Зависимость Maven

Чтобы использовать это расширение в проектах на основе Maven, используйте следующие зависимости:

 <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.9.8</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>
  

Использование

Использование такое же, как в basic JsonFactory ; чаще всего вы просто создаете стандарт ObjectMapper с com.fasterxml.jackson.dataformat.yaml.YAMLFactory помощью, вот так:

 ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
User user = mapper.readValue(yamlSource, User.class);
  

но вы также можете просто использовать базовый YAMLFactory анализатор, который он создает, для обработки на основе событий:

 YAMLFactory factory = new YAMLFactory();
JsonParser parser = factory.createJsonParser(yamlString); // don't be fooled by method name...
while (parser.nextToken() != null) {
  // do something!
}
  

Комментарии:

1. Спасибо за ваш быстрый ответ. Похоже, это решение, которое я хочу, однако одна вещь, которую я не понимаю. Я ожидаю прочитать значения из .yaml файла и присвоить их переменным java. Здесь, в разделе использование, я вижу вызываемый класс, user и readValues() функция возвращает его значения user объекту. Я предполагаю, что все переменные находятся в этом объекте, и к ним можно получить доступ, верно?