Java 在插件和Tomcat中覆盖Spring Boot application.properties?
我们有一个基本项目,Java 在插件和Tomcat中覆盖Spring Boot application.properties?,java,spring,spring-mvc,tomcat,spring-boot,Java,Spring,Spring Mvc,Tomcat,Spring Boot,我们有一个基本项目,example platform和一个扩展客户项目,example-customer1,该项目将平台用作依赖项。平台的application.properties定义默认属性,客户项目将覆盖这些属性。例如,平台可以独立运行,因此它使用的数据库有一个spring.datasource.url,而客户项目使用另一个数据库 起初,我希望这可以简单地通过在客户项目中使用application.properties来完成,该项目更改了必要的属性,但是相反,只使用了该文件中的属性,而不是
example platform
和一个扩展客户项目,example-customer1
,该项目将平台用作依赖项。平台的application.properties定义默认属性,客户项目将覆盖这些属性。例如,平台可以独立运行,因此它使用的数据库有一个spring.datasource.url
,而客户项目使用另一个数据库
起初,我希望这可以简单地通过在客户项目中使用application.properties来完成,该项目更改了必要的属性,但是相反,只使用了该文件中的属性,而不是平台的application.properties中的任何内容。起初,我只是复制了application.properties文件并更改了一些属性,但我不喜欢在平台需要新属性时必须更新客户项目的想法。为了解决这个问题,我将客户项目的application.properties放入config/application.properties。这样,我就可以从平台获得属性,并且只覆盖我在客户项目中需要的属性
现在,当它作为与Tomcat的战争部署时,我需要能够覆盖属性。也就是说,我需要example-customer1/config/application.properties覆盖example-platform/application.properties中的属性,并由Tomcat的某些application.properties覆盖
在我将application.properties放入客户项目的config文件夹之前,我能够在Tomcat上的props/config下有一个application.properties,并从中加载属性。但是,现在customer插件的application.properties在/config下,我认为这是用来代替Tomcat上的属性的
实现这种属性层次结构的最优雅的“Spring”方式是什么
编辑:为了澄清我想要什么,假设我们有一个属性
appName
。在示例platform/application.properties中,我将使用appName=platform app
,在example-customer1/application.properties的application.properties中使用appName=customer app
。然后在Tomcat中,我希望有一个application.properties能够再次覆盖它,因此对于一个部署,它可以是appName=cusomter-app-deployment1
属性按以下顺序加载():
- 打包jar之外的特定于概要文件的应用程序属性(应用程序-{Profile}.properties和YAML变体)
- jar中打包的特定于概要文件的应用程序属性(应用程序-{Profile}.properties和YAML变体)
- 打包jar之外的应用程序属性(Application.properties和YAML变体)
- 打包在jar中的应用程序属性(Application.properties和YAML变体)
/
和/config
位置(在磁盘或jar中)查找application.properties
快速解决方案
- 在初始化spring boot应用程序时指定spring配置文件(
)customer1
- 使用
示例平台/应用程序。属性
- 和
example-customer1/application-customer1.properties
- 创建默认的
src/main/resources/application.properties
- 确保此application.properties位于打包jar中的
或/config
中/
- 为profile
创建一个应用程序-${profile}.properties,您将覆盖以下属性:customer1
src/main/resources/application-customer1.properties
- 不要在此处创建默认的
应用程序.properties
customer1
:
@SpringBootApplication
public class SpringBootApp extends SpringBootServletInitializer{
public static void main(String[] args){
new SpringApplicationBuilder() //
.sources(SpringBootApp.class)//
.profiles("customer1")
.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootApp.class)//
.profiles("customer1");
}
}
就这样。Spring Boot将从其classpasth(例如platform.jar)加载默认的
application.properties
,然后在其上加载application-customer1.properties
。按以下顺序加载属性():
- 打包jar之外的特定于概要文件的应用程序属性(应用程序-{Profile}.properties和YAML变体)
- jar中打包的特定于概要文件的应用程序属性(应用程序-{Profile}.properties和YAML变体)
- 打包jar之外的应用程序属性(Application.properties和YAML变体)
- 打包在jar中的应用程序属性(Application.properties和YAML变体)
/
和/config
位置(在磁盘或jar中)查找application.properties
快速解决方案
- 在初始化spring boot应用程序时指定spring配置文件(
)customer1
- 使用
示例平台/应用程序。属性
- 和
example-customer1/application-customer1.properties
- 创建默认的
src/main/resources/application.properties
- 确保此application.properties位于打包jar中的
或/config
中/
- 为profile
创建一个应用程序-${profile}.properties,您将覆盖以下属性:customer1
src/main/resources/application-customer1.properties
- 不要在此处创建默认的
应用程序.properties