首页 > 解决方案 > 在 Spring Boot 中,如何注册解析应用程序配置时可用的自定义转换器?

问题描述

在 Spring Boot 应用程序中,如何注册自定义转换以在处理应用程序配置时使用?

我已经进行了自定义转换(org.springframework.core.convert.converter.Converter),因此ApplicationConversionService / Binder可以使用它来解析application.properties和application.yaml配置文件中定义的@ConfiguraitonProperties,但不知道如何注册它。

我在这里尝试了解决方案https://stackoverflow.com/a/41205653/45708但它在处理应用程序配置参数后创建了我的转换器实例。

标签: spring-boot

解决方案


我最近自己遇到了这个问题。据我所知,关键问题是绑定到配置属性发生在 Spring 启动过程的早期,在应用程序上下文完全初始化之前。因此,注册转换器的常用方法并不可靠。事实上,用于配置绑定的 ConversionService 似乎是一次性的,并没有真正连接到存储在应用程序上下文中的 ConversionService。

我能够让某些东西正常工作,但感觉就像是 hack,因为它依赖于今天可能工作但明天不行的内部实现细节。无论如何,这是我使用的代码:

((ApplicationConversionService) ApplicationConversionService.getSharedInstance()).addConverter(myCustomConverter);

我发现的技巧是确保在应用程序启动时尽快调用它,以便在需要它的配置绑定之前调用它。我将它放在我的主 @SpringBootApplication 类中的 @PostConstruct 块中,因为它似乎很早就被调用了,至少在我的情况下是这样。


推荐阅读