Spring Profile条件道具文件的多个环境

时间:2014-01-30 02:36:18

标签: spring maven spring-profiles

我有一个问题,有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配置文件的一个原因。我可能错过了一些东西。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

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

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