В настоящее время мы пытаемся реализовать библиотеку JSON Logging с использованием автоматической конфигурации Spring или создать ее Jackson ObjectMapper.Наша цель - не переопределять автоконфигурацию пружины в классе JacksonAutoConfiguration
, чтобы все настройки клиентов библиотеки журналов не были отключены.
Фактическое поведение пружины основано на бинах, и наша главная проблема заключается в том, чтоJacksonProperties
не настраиваются и не используются повторно для нас.Если мы на самом деле добавим второй компонент JacksonProperties
, запуск приложения завершится неудачей, поскольку JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration.class
не сможет обработать второй компонент.(Внутренняя версия Spring Boot не помечена как @Primary
.)
Итак, мы начали переопределять каждый компонент, такой как строитель, настройщик и так далее.Но это не очень поддерживаемо, так как дублирует код фреймворка.
Наш вопрос сейчас заключается в том, можно ли каким-либо образом адаптировать способ создания источников данных для bean-объектов объектов отображения Джексона.Примером создания источников данных может быть следующий.
@Bean(name = "testDataSource")
@ConfigurationProperties(prefix = "test.datasource")
public HikariDataSource naeDataSource(DataSourceProperties testDataSourceProperties) {
return testDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
Мы знаем, что проблема все равно будет в том, что переопределение объектного преобразователя отключит его, но если вы обратите внимание на контекст приложения, это будет намного проще.предложить несколько экземпляров сопоставления объектов.
Или есть какой-то более простой или другой способ, которого мы до сих пор не нашли?
Используемые версии: Spring-Boot 2.0.5.RELEASE
ОБНОВЛЕНИЕ
Я раздвоил проект весенней загрузки, внес некоторые изменения в модуль Spring Boot Autoconfiguration
, а также создал небольшой демонстрационный проект.Я не думаю, что это идеальный способ, но с этими изменениями можно было бы легко инициализировать собственный объектный преобразователь из свойств конфигурации.Например, теперь вы можете легко создать пять сопоставителей объектов для пяти различных шаблонов отдыха и клиентов, вызываемых через REST-API.
@ConfigurationProperties(prefix = "logging.jackson")
@Bean("loggingJacksonProperties")
public JacksonProperties loggingJacksonProperties() {
return new JacksonProperties();
}
@Bean
public ObjectMapper secondObjectMapper(@Qualifier("loggingJacksonProperties") JacksonProperties loggingJacksonProperties) {
return loggingJacksonProperties.initializeJackson2ObjectMapperBuilder().build();
}
Сравнительная вилка: https://github.com/spring-projects/spring-boot/compare/2.1.x...mixaaaa:feature/jackson_properties_initializer
Демонстрационный проект: https://github.com/mixaaaa/jackson-demo