Spring Boot Autoconfigured ObjectMapper плюс дополнительный ObjectMapper - PullRequest
0 голосов
/ 10 декабря 2018

В настоящее время мы пытаемся реализовать библиотеку 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

...