spring-boot - 在 Spring Boot 中,如何注册解析应用程序配置时可用的自定义转换器?
问题描述
在 Spring Boot 应用程序中,如何注册自定义转换以在处理应用程序配置时使用?
我已经进行了自定义转换(org.springframework.core.convert.converter.Converter),因此ApplicationConversionService / Binder可以使用它来解析application.properties和application.yaml配置文件中定义的@ConfiguraitonProperties,但不知道如何注册它。
我在这里尝试了解决方案https://stackoverflow.com/a/41205653/45708但它在处理应用程序配置参数后创建了我的转换器实例。
解决方案
我最近自己遇到了这个问题。据我所知,关键问题是绑定到配置属性发生在 Spring 启动过程的早期,在应用程序上下文完全初始化之前。因此,注册转换器的常用方法并不可靠。事实上,用于配置绑定的 ConversionService 似乎是一次性的,并没有真正连接到存储在应用程序上下文中的 ConversionService。
我能够让某些东西正常工作,但感觉就像是 hack,因为它依赖于今天可能工作但明天不行的内部实现细节。无论如何,这是我使用的代码:
((ApplicationConversionService) ApplicationConversionService.getSharedInstance()).addConverter(myCustomConverter);
我发现的技巧是确保在应用程序启动时尽快调用它,以便在需要它的配置绑定之前调用它。我将它放在我的主 @SpringBootApplication 类中的 @PostConstruct 块中,因为它似乎很早就被调用了,至少在我的情况下是这样。
推荐阅读
- rabbitmq - RabbitMQ — 为什么在使用主题交换时我的路由键被忽略
- c# - 控制器 ASP.net 核心 2.1 中的 Jwt 角色身份验证
- java - 依次打印 ArrayList 中的所有字符
- c# - 访问 CommandParameter 字段 (c# Xamarin)
- opengl - OpenGL3中的虚线?
- java - 使用 Zxing ByQuadrantReader 扫描图像中的多个条形码:Nullpointer
- reactjs - Native Base Linking Issue
- graphql - react-apollo 突变不会重新获取
- python - 如何使用 AWS SDK 重复调用具有从 YAML 文件到 Python 的配对参数列表的函数?
- c# - IdentityServer4 和单独的用户身份验证 API