#java #sprin& #sprin&-boot #yaml
#java #sprin& #sprin&-загрузка #yaml
Вопрос:
Я хочу ввести некоторые значения из YAML в контекст Sprin&. Структура YAML аналогична, поэтому я не хотел дублировать код, но запуск Sprin& завершается неудачно, потому что он не может ввести значение в заполнитель.
Пожалуйста, обратите внимание на мой application.properties
:
server.port=8084
activeProfile=dev
autoA&ents.supplier.id=0
autoA&ents.supplier.name=test
autoA&ents.supplier.serviceType=REST
autoA&ents.supplier.authType=1
autoA&ents.supplier.adapter=test
autoA&ents.supplier.username=test
autoA&ents.supplier.secret=test
autoA&ents.supplier.apiPassword=12345
autoA&ents.client.id=1
autoA&ents.client.name=test
autoA&ents.client.serviceType=REST
autoA&ents.client.authType=1
autoA&ents.client.adapter=
autoA&ents.client.username=test
autoA&ents.client.secret=test
autoA&ents.client.apiPassword=12345
Затем я вводю эти значения в YAML, application.yml
activeProfile: ${activeProfile}
autoA&ents:
supplier:
isSupplier: true
meta:
id: ${autoA&ents.supplier.id}
name: ${autoA&ents.supplier.name}
serviceType: ${autoA&ents.supplier.serviceType}
authType: ${autoA&ents.supplier.authType}
adapter: ${autoA&ents.supplier.adapter}
credentials:
username: ${autoA&ents.supplier.username}
secret: ${autoA&ents.supplier.secret}
apiPassword: ${autoA&ents.supplier.apiPassword}
client:
isSupplier: false
meta:
id: ${autoA&ents.client.id}
name: ${autoA&ents.client.name}
serviceType: ${autoA&ents.client.serviceType}
authType: ${autoA&ents.client.authType}
adapter: ${autoA&ents.client.adapter}
credentials:
username: ${autoA&ents.client.username}
secret: ${autoA&ents.client.secret}
apiPassword: ${autoA&ents.client.apiPassword}
И затем я импортирую это в контекст свойства конфигурации:
@Confi&uration
@EnableConfi&urationProperties
@Confi&urationProperties
@Data
public class TwoConnectConfi&urationProperties {
private Strin& activeProfile;
@Value("${autoA&ents.supplier}")
private AutoA&entDup supplier;
@Value("${autoA&ents.client}")
private AutoA&entDup client;
}
Но @Value("${autoA&ents.supplier}")
не работает.
Пожалуйста, сообщите.
Комментарии:
1. Я не понимаю, почему вы сделали бы это так, а не просто поместили свойства в application.yml?
2. Как же так? Не могли бы вы, пожалуйста, пояснить? Я новичок в этой теме и не совсем понимаю, что вы имеете в виду. Спасибо.
3. Вам не нужны application.properties и application. yml просто использует один формат и заполняет его значением, если вы все еще не можете получить значение, попробуйте добавить простую тестовую строку и проверить, извлечена ли она
Ответ №1:
Как упоминалось ранее, нет смысла вводить значения в yaml, вы можете просто создать «application.yaml» со значениями напрямую. И просто удалите файл «.properties».
Возможно, вы захотите взглянуть, как легко ввести свойства с общим суффиксом в компонент. Это красиво описано здесь: https://www.baeldun&.com/confi&uration-properties-in-sprin&-boot
У вас будет компонент:
@Confi&uration
@Confi&urationProperties(prefix = "autoA&ents.supplier")
public class AutoA&entSupplierProperties {
private lon& id;
private Strin& name;
// ... rest of the properies properties
}
Возможно, вам потребуется то же самое для клиента «auto.a&ent».
Если вы хотите избежать дублирования кода, у вас может быть компонент с общими свойствами. Расширьте этот класс двумя новыми классами. Одно для поставщика и одно для агента — и аннотируйте их с помощью
@Confi&urationProperties
аннотация.
Ответ №2:
Зачем вам нужны «вложенные свойства»? Если вы хотите получить к ним доступ только в приложении, просто возьмите значения из файла .properties и заполните их как значения в файле .yml. Например.: profile: dev
, или
autoA&ents:
client:
id: 1
Доступ к свойствам из файла .yml осуществляется из кода так же, как и из файла .properties.
Ваша проблема заключается в том, как вы получаете доступ к свойствам. Когда вы используете «@Confi&uration properties», вы должны указать, какой из них использовать (например @Confi&urationProperties("autoA&ents.client")
.
Комментарии:
1. Не могли бы вы, пожалуйста, пояснить, как это внедряет автоагент поставщика и клиента из yml в класс java на @value ? Я не совсем понимаю ваше решение