自动配置在spring-boot中添加PropertySource

时间:2015-11-04 23:07:55

标签: java spring spring-boot

我想添加一个自定义PropertySource(类,而不是注释)。注释是不够的,因为它只处理文件源。

有效的方法是定义自己的ApplicationContextInitializer并向META-INF / spring.factories添加适当的声明。 ApplicationContextInitializer只使用: Environment.getPropertySources().addLast(...) 但是有一些缺点,主要是:

  • 它始终运行,但最好的行为是仅在满足某些条件时运行(@ConditionalOnClass等)

如何实现?理想情况下,我会使用@Condition ...注释编写我的自动配置,并在内部声明这样的初始化程序(最好是有序的)。

编辑: 在我的特定情况下,我想定义Archaius PolledConfigurationSource,但只有当Archaius在类路径上时 - 这就是为什么我想在生命周期的早期就将@ConditionalOnClass与一个监听器一起使用。

1 个答案:

答案 0 :(得分:1)

你可以有一个中介类 - 你的应用程序的一部分,我们称之为“ProviderConfigurer” - 其目标是加载一个服务(打包在一个单独的jar中,使用META-INF / services / targetSPi)将加载Archaius。 因此,要激活Archaius,您必须放置2个罐而不是1个,但随后ProviderConfigurer将能够加载服务提供的属性源(API将成为您必须定义的接口的一部分......)任何在类路径中被发现,并且如果服务没有找到任何实现您将为此目的定义的SPI的类,则不执行任何操作。