Разделить конфигурацию Джексона на отдельные свойства - PullRequest
0 голосов
/ 30 марта 2020

Я использую Spring Boot 2.2.5.RELEASE и хотел бы разделить мои application.properties на отдельные файлы. В StackOverflow уже есть похожие вопросы, но ни один из них не подходит для настройки Jackson.

Мое текущее нерабочее решение:

root/
- application.properties (without Jackson configuration)
- jackson-configuration.properties (includes Jackson configuration)

Класс конфигурации Jackson:

@Configuration
@PropertySource("/jackson-configuration.properties")
public class JacksonConfiguration {

}

Обратите внимание, я пробовал разные способы указать путь, включая:

  • "/ jackson-configuration.properties"
  • "jackson-configuration.properties"
  • "classpath: /jackson-configuration.properties"
  • "classpath: jackson-configuration.properties"

Spring Boot, похоже, не использует конфигурацию. Если я скопирую его в application.properties - оно работает.

Содержимое jackson-configuration.properties:

spring.jackson.property-naming-strategy=SNAKE_CASE
spring.jackson.mapper.sort-properties-alphabetically=true
spring.jackson.deserialization.fail-on-unknown-properties=true
spring.jackson.parser.strict-duplicate-detection=true
spring.jackson.time-zone=Europe/Zurich

Мое приложение помечено @SpringBootApplication, поэтому оно должно сканировать для дополнительных свойств.

/ edit

Я только что понял, что проблема заключается в тестировании, а не в самом производительном коде. Если я запускаю приложение, оно работает. Что не работает, так это тестирование с @JsonTest. Я могу решить эту проблему, добавив следующую строку в мои тесты @ContextConfiguration(classes = {JacksonConfiguration.class}). Но, в свою очередь, это приводит к тому, что аннотация @JsonComponent перестает работать, но только для аннотированных классов @JsonTest.

1 Ответ

0 голосов
/ 30 марта 2020

См. Документацию здесь . Вот выдержка из документации

Чтобы разрешить $ {...} заполнителей в определениях или аннотациях @Value, используя свойства из PropertySource, необходимо убедиться, что зарегистрирован соответствующий преобразователь встроенных значений. в BeanFactory, используемом ApplicationContext. Это происходит автоматически при использовании в XML. При использовании классов @Configuration это может быть достигнуто путем явной регистрации PropertySourcesPlaceholderConfigurer с помощью метода stati c @Bean.

Вам необходимо создать компонент, подобный этому

@Bean
public static PropertySourcesPlaceholderConfigurer devPropertyPlaceholderConfigurer() throws IOException {
   PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
   configurer.setLocations(new PathMatchingResourcePatternResolver().getResources("file:pathtToFile"));
   configurer.setIgnoreUnresolvablePlaceholders(true);
   return configurer;
}
...