我使用spring-boot有很多不同的服务。我想为每个配置设置一些常见的配置,但允许服务拥有自己的属性并在需要时覆盖它们。示例属性包括spring.show_banner,management url ones等。
我该怎么做?如果我有以下内容:
我希望它们与优先使用的service1版本合并。相反,似乎只使用了在类路径中找到的第一个。
(或者,使用@Configuration类会更好,但我不确定它们是否可用于定义许多属性)
答案 0 :(得分:13)
您可以使用多种选项,所有选项均基于order in which property sources are considered。
如果您的公共图书馆负责创建SpringApplication
,则可以使用setDefaultProperties
。这些值可以被您的服务覆盖' application.properties
。
或者,您的图书馆可以在其@PropertySource
个类之一上使用@Configuration
来配置,例如library.properties
作为来源。同样,这些属性可以在您的服务中覆盖' application.properties
。
答案 1 :(得分:1)
我不确定合并它们的意思。
但我假设最后,您正在描述您具有特定于配置文件的配置的情况。因为,可以使用Spring配置文件管理/注入特定于某个服务的任何属性,始终优先于默认属性文件(请参阅documentation)。
例如,您可以拥有文件 application-service1.properties ,当您使用 spring.profiles.active = service1 属性运行应用时,该文件会自动使用,可以在命令行和other位置指定。 如果您未指定此属性,Spring Boot将回退到默认的 application.properties 文件。
您当然可以在两个文件中编写公共属性:
application.properties
service.url = http://localhost:8080/endpoint
service.user =管理员
service.password =管理员
application-service1.properties
service.url = http://api.service.com/endpoint
service.user =管理员
service.password = aosdnoni3
希望这有帮助。
抱歉格式错误,我仍然不熟悉编辑器。