#spring-boot
#весенняя загрузка
Вопрос:
В нашем интеграционном тестировании с использованием springboot 1.4 мы использовали
@ConfigurationProperties(locations = "classpath:test.yml")
с помощью locations
атрибута. Это было автоматическое сопоставление свойства string с enum. Но, начиная с springboot 1.5, locations
атрибут удаляется.
В качестве обходного пути я использую @PropertySource
, но это не поддерживает файл yaml. Итак, я использую фабричный класс для преобразования yaml в java.util.properites
. Но я сталкиваюсь с проблемами, когда свойство string не привязывается к перечислению автоматически.
Есть ли какое-либо хорошее решение для этого?
Ответ №1:
Вы можете сопоставить файл yaml с классом config
Относительный путь приложения. файл yml находится в/MyApplication/src/main/resources/application.yml.
Приложение Spring принимает первый профиль в качестве профиля по умолчанию, если в приложении Spring не указано иное.
ФАЙЛ YAML
spring:
profiles: test
name: test-YAML
environment: test
servers:
- www.abc.test.com
- www.xyz.test.com
---
spring:
profiles: prod
name: prod-YAML
environment: production
servers:
- www.abc.com
- www.xyz.com
Привязка YAML к классу конфигурации
Чтобы загрузить набор связанных свойств из файла properties, мы создадим класс bean:
Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {
private String name;
private String environment;
private List<String> servers = new ArrayList<>();
// standard getters and setters
}
Здесь используются следующие аннотации:
@Configuration marks the class as a source of bean definitions
@ConfigurationProperties binds and validates the external configurations to a configuration class
@EnableConfigurationProperties this annotation is used to enable @ConfigurationProperties annotated beans in the Spring application
ИСПОЛЬЗОВАНИЕ:
@SpringBootApplication
public class MyApplication implements CommandLineRunner {
@Autowired
private YAMLConfig myConfig;
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MyApplication.class);
app.run();
}
public void run(String... args) throws Exception {
System.out.println("using environment: " myConfig.getEnvironment());
System.out.println("name: " myConfig.getName());
System.out.println("servers: " myConfig.getServers());
}
}
Комментарии:
1. @iluvgarden помогло ли это вам?