Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在插件和Tomcat中覆盖Spring Boot application.properties?_Java_Spring_Spring Mvc_Tomcat_Spring Boot - Fatal编程技术网

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变体)
默认情况下,Spring boot将在类路径(文件夹和jar内部)中的
/
/config
位置(在磁盘或jar中)查找application.properties

快速解决方案
  • 在初始化spring boot应用程序时指定spring配置文件(
    customer1
  • 使用
    示例平台/应用程序。属性
  • example-customer1/application-customer1.properties
相同的解决方案-长版本 (1) 平台项目
  • 创建默认的
    src/main/resources/application.properties
  • 确保此application.properties位于打包jar中的
    /config
    /
(2) 客户1项目
  • 为profile
    customer1
    创建一个应用程序-${profile}.properties,您将覆盖以下属性:
    src/main/resources/application-customer1.properties
  • 不要在此处创建默认的
    应用程序.properties
(3) 发射 无论您是从jar还是作为部署的war启动spring boot应用程序,都需要指定概要文件
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变体)
默认情况下,Spring boot将在类路径(文件夹和jar内部)中的
/
/config
位置(在磁盘或jar中)查找application.properties

快速解决方案
  • 在初始化spring boot应用程序时指定spring配置文件(
    customer1
  • 使用
    示例平台/应用程序。属性
  • example-customer1/application-customer1.properties
相同的解决方案-长版本 (1) 平台项目
  • 创建默认的
    src/main/resources/application.properties
  • 确保此application.properties位于打包jar中的
    /config
    /
(2) 客户1项目
  • 为profile
    customer1
    创建一个应用程序-${profile}.properties,您将覆盖以下属性:
    src/main/resources/application-customer1.properties
  • 不要在此处创建默认的
    应用程序.properties
(3) 刘