【问题标题】:maven profiles or spring profiles?maven型材还是弹簧型材?
【发布时间】:2012-08-05 19:57:14
【问题描述】:

很多 java 应用程序都是用 maven 构建的。 maven 有 Profiles 的概念,为不同的环境构建发布包真的很方便。例如dev/test/prod 使用不同的path / jndiname / security rule / properties files...我想我这里不用列出代码来解释了。

Spring 是一个非常好的和流行的 java 开发框架,从 spring3 开始它也支持配置文件概念。

现在问题来了,对于发布到不同的 ENV 目的,哪个更好?现在我更喜欢 Maven 配置文件。因为 spring 必须复制每个配置文件中的每个 bean 定义。它需要一个初始化器/属性来让 spring 知道应该激活哪个配置文件。

但我觉得 spring 配置文件比 maven 配置文件更灵活。

你怎么看?请给一些建议。谢谢。

【问题讨论】:

    标签: java spring maven deployment


    【解决方案1】:

    Maven 配置文件将提供构建时解决方案,而 SpringFramework 配置文件将提供运行时替代方案。我想这是大家可能会问自己的第一个问题:是想拥有一个可以部署在不同环境中的单个包,还是希望构建工具根据目标环境提供不同的包。

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

    【讨论】:

      【解决方案2】:

      如果您需要不同的工件,请使用 maven。如果它只是一个可以在构建工件之后配置的真实配置,那么使用 Spring 配置文件。

      【讨论】:

        【解决方案3】:

        正如其他回复中提到的:这完全取决于你的工作方式:)

        我们在过去几年中使用 maven 和现在的 spring 3.1 配置文件是这样的:

        • 我们使用 maven-release-plugin 来减少发布。如果我们使用 maven 配置文件,这会导致环境问题,因为我们需要重建版本或至少每个 maven 配置文件的标签
        • 所以我们为所有环境创建 .war 文件并使用 spring PropertyPlaceholderConfigurer 来设置应用程序(或某些 JNDI 资源,具体取决于客户)。这允许只运行一个 Maven 版本。
        • 当环境不同时,弹簧型材也会出现。例如,并非在所有环境中都可用的身份验证服务。在这里,我们存根该服务并将其放入弹簧配置文件中。我们激活了属性中的弹簧轮廓,我们无论如何都使用PropertyPlaceholderConfigurer 读取。

        有一些关于如何做到这一点的不错的教程:

        我们通常只使用 maven 配置文件将构建分成不同的部分,供开发人员和持续集成构建使用。对于 .war 文件,我们实际上不再将它们用于目标环境。 我们仍然使用 maven 配置文件进行自动化数据库部署,这与 Web 应用程序(数据量、测试数据等)相比差异更大,但这些文件不是以 zip 格式交付的。

        肯定还有其他方法可以走。我不认为这是故事的结局:)

        但它可能会有所帮助。

        【讨论】:

          【解决方案4】:

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

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

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

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

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

          【讨论】:

            【解决方案5】:

            我认为这取决于您的要求。如果你有基于环境的不同依赖(即jdbc驱动等),你会想使用maven来解决这个问题。

            如果只是配置部署的问题,那么使用 spring 可能会更好。

            【讨论】:

              猜你喜欢
              • 2020-03-01
              • 2012-12-18
              • 1970-01-01
              • 2016-03-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多