Как использовать файлы YAML с помощью Spring Framework?
Мое приложение основано на Spring, и я хотел бы загрузить файл yml с централизованного сервера, но не смог этого сделать.
Мой файл yml выглядит так:
spring:
application:
name: signed-in-web
cloud:
config:
uri: ${server.url}
health:
config:
enabled: false
примечание: server.url определяется в параметрах vm. Я проверил у остальных клиентов, что свойства действительны и доступны на сервере.
Затем я попытался скопировать его в файл свойств следующим образом: application.properties
LOCATION_SEARCH=${properties.app.api-key.location-search}
У меня был класс конфигурации Java, как это:
@Profile("!test")
@ComponentScan(basePackages = { "com.company.frontend.*" })
@Configuration
@PropertySource("classpath:properties/qa_env.properties")
public class propertiesConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("bootstrap.yml"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
}
Я предполагал, что это загрузит конфигурацию следующим образом:
@Value("${LOCATION_SEARCH}")
public static String LOCATION_SEARCH;
но я получаю ноль. Почему-то я не смог найти, где проблема. Будет
1 ответ
Если вы используете Spring Boot, вам просто нужно позвонить application-qa.yaml
и включить qa
профиль. Смотрите также spring.config
а также spring.profiles
в общих свойствах приложения.
В противном случае вам просто нужно объявить файл yaml в @PropertySource
или же @PropertySources
,
Только если вы не хотите, чтобы свойства в глобальной среде начинали нуждаться в использовании PropertiesConfigurationFactory
а также YamlPropertiesFactoryBean
вручную связать их.