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

标签 java spring spring-boot

我想添加一个自定义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/

相关文章:

java - 如何创建同一类的多个对象?

java - 无法使用 @ContextConfiguration(classes={ ... }) 加载 ApplicationContext

java - Spring Cloud Data Flow @EnableBinding 注解会破坏构造函数注入(inject)

java - 如何将过滤后的流数组输出收集为列表

java - 有没有易于使用和编程的日期选择器java swing?

java - 阐明http错误404

java - 尝试使用 java spring boot、hibernate 和 thymeleaf 坚持 MAP,但在验证时遇到错误

java - 从 Java 代码调用 Spring 组件

c# - 使用 PHP 转换/使用为 C#/Java 编写的 API

java - 使用 webAllowOthers 的 H2 控制台远程访问