【问题标题】:Different Spring config files for different builds不同构建的不同 Spring 配置文件
【发布时间】:2011-06-18 13:36:42
【问题描述】:

在 Spring 应用程序中,我设置了 app-security.xml 来控制所有的安全问题。但是,生产将使用 SSO,而在本地机器上,我想要普通的旧用户身份验证。我还有两台本地机器 - 一台,该项目由 IntelliJ Idea 构建,另一台 - 由 Ant 构建,生成 WAR。生产系统将使用 Ant 构建。

我如何组织我的项目,以便可以方便地开发并能够构建类似生产的系统?

【问题讨论】:

    标签: java spring ant build config


    【解决方案1】:

    您可以使用PropertyPlaceHolderConfigurer bean 为您定义变量。你可以试试

    <import resource="${resource}" />
    

    PropertyPlaceHolderConfigurer bean 扫描 xml 配置中的变量,例如 ${resource},并根据属性文件中的设置替换这些变量。这假设您的属性文件中有单独的值用于生产和开发。

    未来项目的提示是尝试maven out。那里有一个filtering 功能,它允许您根据配置文件定义自定义属性,非常简洁和有用。

    【讨论】:

    • 相比 Maven 配置文件,将每个环境视为不同的工件可能更容易。这样您就不必记住特殊的命令行标志。
    • 不错的主意,我个人让我的 IDE 为我解决这些问题。
    【解决方案2】:

    我最近使用这种方法来解决类似的问题。我使用了 Spring 3 的新特性——表达式语言。它允许您执行以下操作:

    <bean class="com.my.AuthManager">
        <property name="authProvider" 
                  ref="#{systemProperties['isDevelopment'] ? 'localProvider' : 'ssoProvider'}" />
    </bean>
    
    <bean id="localProvider" lazy-init="true" ... />
    <bean id="ssoProvider" lazy-init="true" ... />
    

    在这种情况下,您可以使用-DisDevelopment=true 启动JVM,并且将使用localProvider。另一方面,ssoProvider 甚至不会被实例化,因为lazy-init 属性是true。

    【讨论】:

      【解决方案3】:

      如果您可以迁移到 Spring 3.1,那么它对特定于环境的配置文件具有原生支持

      “环境配置文件”将允许 占位符解析基于 指定的环境名称(或名称)。 这允许不同的配置 例如,在开发和生产中, 没有两个不同的 部署工件。我觉得他也 提到了环境抽象, 我认为这将用于访问 相同的配置 以编程方式。

      如果您使用的是旧版本,那么您可能希望自己管理它(主要通过构建过程。我们使用 maven 并且我们使用 maven 配置文件来执行此操作。我相信您也可以使用 ant 做同样的事情)。以下是对此的讨论:http://forum.springsource.org/showthread.php?t=12373

      【讨论】:

        【解决方案4】:

        我在我最新的基于 Spring 的项目中使用了Configleon,让 Spring 根据我所处的环境加载属性文件。 该库适用于 Web 应用程序和不使用 Servlet 的应用程序。

        【讨论】:

          【解决方案5】:

          我个人不喜欢为每个环境使用不同的 WAR 文件。这是一个很大的 DRY 违规。 Spring 3.1 最终将在核心中解决这个问题。同时,您可以使用 Easy Angel 给出的 Spring EL 方法,或者(我的偏好)使用带有代码的 @Bean 在不同的实现之间切换。

          【讨论】:

          【解决方案6】:

          您可以使用属性文件来定制不同的环境。

          【讨论】:

            猜你喜欢
            • 2010-09-15
            • 2018-05-28
            • 2015-09-17
            • 2016-06-27
            • 2014-12-27
            • 2015-08-22
            • 2012-06-27
            • 1970-01-01
            相关资源
            最近更新 更多