使用spring-boot在库中设置默认属性

Eri*_*c D 7 java spring spring-boot

我使用spring-boot有很多不同的服务.我想为每个配置设置一些常见的配置,但允许服务拥有自己的属性并在需要时覆盖它们.示例属性包括spring.show_banner,管理URL等.

我怎样才能做到这一点?如果我有以下内容:

  • service-common with src/main/resources/application.yml,默认属性
  • service1与src/main/resources/application.yml及其自己的属性

我希望它们与优先使用的service1版本合并.相反,似乎只使用了在类路径中找到的第一个.

(或者,使用@Configuration类会更好,但我不确定它们是否可用于定义许多属性)

And*_*son 15

您可以使用多种选项,所有选项均基于考虑属性源顺序.

如果您的公共库负责创建SpringApplication它可以使用setDefaultProperties.这些值可以被您的服务覆盖application.properties.

或者,您的库可以@PropertySource在其中一个@Configuration类上使用来配置,例如,library.properties作为源.同样,这些属性可以在您的服务中覆盖application.properties.

  • 这仅适用于.properties文件,[不适用于.yml文件](https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-特征-外部-CONFIG-YAML的缺点). (4认同)
  • 我试过这种方法,似乎它不适用于所有属性.例如,`spring.main.banner-mode = off`似乎不起作用.而其他属性都可以.我假设在启动阶段很早就使用了一些属性,它们无法通过外部库中的PropertySource设置?这种理解是否正确,如果是,那么设置这些属性以及哪些属性受影响的唯一方法是什么? (2认同)