【发布时间】:2016-10-19 16:26:26
【问题描述】:
我正在构建一个库,它为使用我们的Spring Cloud Config/Eureka 设置的应用程序提供了一个自以为是的配置。我们的想法是将此配置作为自定义启动器提供,在单个微服务应用程序中很少或没有与 Spring Cloud 相关的样板。
此时,我想放入此库中的大部分共享配置都包含bootstrap.yml 中的内容。我想在我的自定义启动器中提供bootstrap.yml,但使用该库的应用程序仍然需要能够提供自己的bootstrap.yml,即使它们可以正确设置它们的spring.application.name。
由于bootstrap.yml 从类路径加载的方式,如果应用程序有自己的bootstrap.yml,Spring 似乎会忽略共享库中的那个。由于引导上下文处理ApplicationContextInitializers 的特殊方式,我什至不能使用ApplicationContextInitializer 来自定义环境。
有没有人对在这里可行的方法有任何建议?我想提供一个插入式库,使我们自以为是的引导配置工作,而不必在我们所有的项目中复制样板 bootstrap.yml。
【问题讨论】:
-
我不认为你可以使用 bootstrap.yml 本身来做到这一点,但你可以插入引导机制本身并使用默认值填充属性源。
-
为什么是 yaml 文件?您可以创建 Java 配置。这会更容易分发。
-
当然 java 会更容易分发。但是,我需要进行大量定制才能完成使用 yaml 可以轻松完成的事情。例如,简单地提供一些 javaconfig 来关闭某个配置文件下的 spring 云总线,在配置超过约定方面是相当令人生畏的,但可以在 yaml 中通过简单的 spring.cloud.bus.enabled=false 来完成。只是为了提供一个默认的 eureka defaultZone,我正在考虑自己配置 bean,否则它们会从 autoconfig 中受益。
标签: spring spring-boot spring-cloud netflix-eureka