0

我有一个关于 Spring Profiles 的问题。我理解不使用 Maven 配置文件的原因,因为每个环境都需要另一个工件。从那以后。我修改了我的代码以使用 Spring Profile,但 Spring Profiles 的问题是它要求您在服务器上为每个环境都有一个 database.property 文件。我有这个设置,每个人都看过一百次的相同设置。

src
- main
- resources
   -conf
     myapp.properties
   -env
      dev.db.properties
      test.db.properties
      prod.db.properties

我认为这种设置的问题是,每台服务器都会在 env 目录中拥有所有文件(即 dev 将在其服务器上拥有 prod.db.properties 和 test.db.properties 文件)。有没有办法只复制 Maven 构建过程中需要的文件而不使用配置文件?我一直想不出办法。如果是这种情况,那么这似乎是使用 Maven 配置文件的理由。我可能错过了什么。任何想法将不胜感激。

4

2 回答 2

2

这对我来说似乎是鸡和蛋的问题。如果您希望您的工件在所有这 3 个环境中工作,您需要提供 3 个配置。不这样做会导致您最初提到的相同问题。根据配置文件以不同方式构建具有特定坐标的工件通常是一种不好的做法。

如果您不想在工件本身中发布配置,您可以通过使用系统属性或通过在定义的位置定位属性文件(为方便起见,您可以覆盖)将定义外部化。

于 2014-01-30T08:45:38.193 回答
0

您应该首先指出您的应用程序到底是什么:如果您正在运行“在不同环境中的应用程序”,或者如果您正在“在它们自己的专有环境中运行不同的应用程序”。这是两个略有不同的概念:

  • 如果您在不同的环境中运行应用程序,最好将所有属性文件放入您的 jar 中。想象一下您购买了一辆新的 SUV,从而将其牢记在心;您首先在测试跑道上驾驶它,然后在普通高速公路上行驶,然后再进行越野,最终享受其越野能力。您总是在不同的环境中使用一辆具有所有功能和驾驶特性的汽车。在每种环境中,汽车都会调整其行为和驾驶特性。如果您使用一个应用程序来驱动它通过不同的环境,那么使用第一种方法将所有环境特征构建到一个 jar 中。
  • 另一方面,您也可以在不同的环境中使用略有不同的汽车。因此,如果您需要在不同环境下具有自己特殊驾驶特性的不同汽车,可能是 4WD 或特殊泛光灯,因为您是夜间驾驶,您应该采取第二种方法。回到应用程序:如果您在不同的生产环境中需要具有不同特征的不同应用程序,最好只使用它真正需要的属性来构建每个应用程序。

最后,您还可以合并两种方法:

  • my-fun-application-foo.jar 用于客户 foo,具有用于测试、集成和生产环境的属性。
  • my-fun-application-2047.jar 用于客户 2047,具有用于测试、预集成、集成、预生产和生产环境的属性。

现在您也应该了解为什么不应该使用配置文件来构建具有不同风格的应用程序。

于 2014-01-30T08:48:56.713 回答