如何创建依赖于Spring Bean的自定义Spring PropertySource
作者:互联网
我正在尝试将spring-cloud堆栈用于将使用Zuul的项目.在我的组织中,我们有一个基于xml的自定义配置堆栈,并进行属性组合和分层覆盖.由于处理这种配置的方式,我一直在努力为它创建一个PropertySource.
我的自定义PropertySource必须使用我的Config bean,但是因为在Spring Boot引导期间初始化了PropertySources,所以应用程序上下文尚未完全初始化,我无法访问暴露基于xml的配置系统的自定义Bean.
@ConfigurationProperties似乎完全偏向于.properties和.yaml文件. Config bean在ApplicationContextInitializer中初始化.有没有办法延迟各种服务中ConfigurationProperties的解析,所以我可以在初始化后使用我的Config bean构建我的自定义属性源?
解决方法:
我最初尝试(在提出问题之前)在我的配置中创建一个自定义的PropertySourceLocator(正如Dave Syer所提到并在他给出的链接中有详细记录)并使用我自己的spring.factories进行注册(再次,在有用的链接中演示)由Spencer Gibb在评论中给出.)问题是我的属性源需要在ApplicationContextInitializer中完成的一些工作之后配置,并且属性源似乎在发生之前就已经解决了(至少那些作为工厂连接的) for org.springframework.cloud.bootstrap.BootstrapConfiguration).我想我通过声明我在我的PropertySource中需要一个我当时无法从ApplicationContext获取的特定bean来暗示这一点.
无论如何,为了解决这个问题,我现在在PriorityOrdered ApplicationContextInitializer中注册属性源,以便在另一个初始化我的配置对象之后进行.类似于:context.getEnvironment().getPropertySources().addFirst(myPropertySource);
这似乎在正确的时间将我的属性源放入环境中,并允许我根据需要预先定制上下文.
标签:java,spring,spring-boot,netflix-zuul,spring-cloud 来源: https://codeday.me/bug/20190722/1505201.html