@PropertySource не привязывает свойство строки к перечислению автоматически?

#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 помогло ли это вам?