我想添加一个自定义PropertySource(类,而不是注释)。注释是不够的,因为它只能处理文件源。
有效的方法是定义自己的ApplicationContextInitializer并向META-INF/spring.factories添加适当的声明。 ApplicationContextInitializer 仅使用:
Environment.getPropertySources().addLast(...)
但也有一些缺点,主要是:
- 它始终运行,但更好的行为是仅在满足某些条件(@ConditionalOnClass 等)时运行
如何实现这一目标?理想情况下,我会使用 @Condition... 注释编写自动配置,并在内部声明此类初始值设定项(最好是有序的)。
编辑: 在我的特定情况下,我想定义 Archaius PolledConfigurationSource,但前提是 Archaius 位于类路径上 - 这就是为什么我想在生命周期的早期阶段将 @ConditionalOnClass 与事件监听器一起使用。
最佳答案
您可以有一个中间类 - 您的应用程序的一部分,我们将其称为“ProviderConfigurer” - 其目标是加载一个服务(使用 META-INF/services/targetSPi 打包在单独的 jar 中),然后依次加载该服务将加载Archaius。 因此,要激活 Archaius,您必须放置 2 个 jar,而不是 1 个,但是 ProviderConfigurer 将能够加载服务提供的属性源(API 将成为您必须定义的接口(interface)的一部分...)如果any 在类路径中被发现,并且如果服务找不到任何实现您为此目的定义的 SPI 的类,则不执行任何操作。
关于java - 在 spring-boot 中自动配置添加 PropertySource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533792/