#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
объекту. Я предполагаю, что все переменные находятся в этом объекте, и к ним можно получить доступ, верно?