java - 如何创建依赖于 Spring Bean 的自定义 Spring PropertySource

标签 java spring spring-boot spring-cloud netflix-zuul

我正在尝试将 spring-cloud 堆栈用于将使用 Zuul 的项目。在我的组织中,我们有一个基于 xml 的自定义配置堆栈,它执行属性组合和分层覆盖。由于此配置的处理方式,我一直在努力为其创建 PropertySource。

我的自定义 PropertySource 必须使用我的 Config bean,但是因为 PropertySources 在 spring boot 的引导过程中被初始化,所以应用程序上下文还没有完全初始化,我无法访问我的自定义 Bean,它公开了我们基于 xml 的配置系统。

@ConfigurationProperties 似乎完全偏向于 .properties 和 .yaml 文件。 Config bean 在 ApplicationContextInitializer 中初始化。有没有一种方法可以延迟各种服务中 ConfigurationProperties 的解析,以便我可以在初始化后使用我的 Config bean 构建我的自定义属性源?

最佳答案

我最初尝试(在提出问题之前)在我的配置中创建一个自定义 PropertySourceLocator(如 Dave Syer 所提到的,并在他提供的链接中有详细记录)并使用我自己的 spring.factories 注册它(同样,在Spencer Gibb 在评论中给出的有用链接。)问题是我的属性源需要在 ApplicationContextInitializer 中完成一些工作之后进行配置,并且属性源似乎都在这之前得到解决(至少那些连接的作为 org.springframework.cloud.bootstrap.BootstrapConfiguration 的工厂)。我想我是通过说明我需要我的 PropertySource 中的一个特定 bean 来暗示这一点的,我当时无法从 ApplicationContext 中获取它。

无论如何,为了解决这个问题,我现在在 PriorityOrdered ApplicationContextInitializer 中注册属性源,以便在另一个初始化我的配置对象之后发生。类似于:context.getEnvironment().getPropertySources().addFirst(myPropertySource);

这似乎让我的属性源在正确的时间进入环境,并允许我根据需要事先对上下文进行自定义。

关于java - 如何创建依赖于 Spring Bean 的自定义 Spring PropertySource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29037507/

相关文章:

java - 如何通过spring 4 resttemplate发送接收到的jsessionid

java - JAXB java对象到xml,创建Pascal Case XML元素

java - WADL2JAVA:Gradle插件

hibernate - 在 Spring Boot 中编写自定义查询

java - 带月份的 Switch 语句

java - 有没有办法直接在子类上查看 IntelliJ 中 super 类的属性/方法?

java - Android Studio/Intellij,Gradle 错误 :Cause: peer not authenticated

java - 最近更改后的 web.xml 值非法

java - 抛出并捕获异常,还是使用instanceof?

java - Spring安全性返回401甚至permitAll()