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

2022-09-02 21:07:05

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

我该怎么做?如果我有以下情况:

  • 服务与 src/main/resources/application.yml 具有默认属性
  • service1 with src/main/resources/application.yml,具有自己的属性

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

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


答案 1

有几个选项可供您使用,所有这些选项都基于考虑属性源的顺序

如果您的公共库负责创建它,则可以使用 。这些值可以被您的服务覆盖。SpringApplicationsetDefaultPropertiesapplication.properties

或者,您的库可以使用其类之一进行配置,例如,作为源。同样,这些属性随后可以在服务的 中覆盖。@PropertySource@Configurationlibrary.propertiesapplication.properties


答案 2

我不确定你合并它们是什么意思。

但我假设最终,您正在描述具有特定于配置文件的配置的情况。因为,任何特定于特定服务的属性都可以使用Spring配置文件进行管理/注入,这些配置文件将始终优先于默认属性文件(请参阅文档)。

例如,你可以拥有在运行应用时自动使用的文件,该文件的属性为 ,可以在命令行和其他位置指定。如果未指定此属性,则 Spring Boot 将回退到默认文件。application-service1.propertiesspring.profiles.active=service1application.properties

当然,您可以在两个文件中编写通用属性:

应用程序.属性:

service.url=http://localhost:8080/endpoint
service.user=admin
service.password=admin

应用程序服务1.属性:

service.url=http://api.service.com/endpoint
service.user=admin
service.password=aosdnoni3

推荐