Maven配置文件还是Spring配置文件?

41
许多Java应用程序都是使用Maven构建的。 Maven具有配置文件(Profiles)的概念,它非常方便地为不同环境构建发布软件包。例如,使用不同的路径/ JNDI名称/安全规则/属性文件等在dev/test/prod中。我认为我不必在这里列出代码来解释它。
Spring是Java开发的一个非常好的和流行的框架,自spring3以来就支持Profiles的概念。
现在问题来了,为了发布到不同的环境,哪个更好?目前我更喜欢Maven配置文件,因为Spring需要在每个Profile中复制每个bean定义,并且它需要一个初始化器/属性来让Spring知道应该激活哪个Profile。
但我感觉Spring Profile比Maven Profile更灵活。
你认为呢?请给一些建议。谢谢。
5个回答

43

Maven配置文件提供的是构建时的解决方案,而SpringFramework配置文件则提供了运行时的替代方案。我认为这是人们可能会问自己的第一个问题:他是否希望有一个可以在不同环境中部署的单个软件包,或者他是否希望构建工具根据目标环境提供不同的软件包。

需要记住的一件事是,如果将不同的软件包部署到不同的服务器上,可能会出现许多问题。例如,在我的工作场所,如果我部署一个包来纠正以前在生产环境中发生的错误,公司政策规定唯一可接受的情况是我在QA和生产服务器中有相同的解决方案包。


9

如果您需要不同的构件,则使用Maven。如果只是真正的配置可以在构建构件之后进行配置,则使用Spring配置文件。


7

正如其他回复中提到的那样:一切都取决于你的工作方式 :)

在过去的几年中,我们使用Maven和现在的Spring 3.1配置文件得出了以下结论:

  • 我们使用maven-release-plugin来发布版本。如果我们使用Maven配置文件,这会导致环境问题,因为我们需要使用每个Maven配置文件重新构建发布或至少标记
  • 因此,我们为所有环境创建一个.war文件,并使用Spring PropertyPlaceholderConfigurer设置应用程序(或某些基于JNDI的资源,具体取决于客户端)。这样只需运行一个Maven发布。
  • 当环境不同时,Spring配置文件也会发挥作用。例如,在某些环境下无法使用身份验证服务。在这种情况下,我们将该服务存根并将其放入Spring配置文件中。我们在PropertyPlaceholderConfigurer中读取的属性中激活Spring配置文件。

有一些很好的教程可以指导您完成这项工作:

我们通常只使用Maven配置文件将构建过程分解为不同的部分,以便供开发人员和持续集成构建使用。实际上,对于.war文件,我们不再将它们用于目标环境。我们仍然使用Maven配置文件来进行自动数据库部署,这与Web应用程序有所不同(数据量、测试数据等),但这些内容不会作为zip文件交付。
当然还有其他方法可供选择,我认为这并不是结束的故事 :)
但这可能会有所帮助。

2

我刚好使用了properties-maven-plugin来根据激活的maven配置文件设置系统属性。然后在Spring中,我通过编程方式激活了我想要的配置文件,具体取决于该系统属性:

String activeProfile = System.getProperty("myapp.profile");

appContext.getEnvironment().setActiveProfiles(....)

此外,当我想直接链接这两种类型的配置文件(maven/spring)时,我通过maven插件设置了spring.profiles.active属性。

这些做法可能在设计上有误,但它们解决了我的问题。


0

我认为这取决于您的需求。如果您有基于环境的不同依赖项(即jdbc驱动程序等),则最好使用maven来解决这个问题。

如果只是配置部署的问题,那么最好使用spring。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接