【问题标题】:Spring Best approach for multiple environmentsSpring 适用于多种环境的最佳方法
【发布时间】:2014-12-25 02:53:20
【问题描述】:

我有以下几点:

  • 系统 A - 授权 (REST API)
  • 系统 B - 需要检查身份验证
  • 系统 C - 需要检查身份验证
  • 系统 D - 需要检查身份验证

而且我有很多环境:

  • 发展
  • 同源
  • 生产

System A 每一个都有不同的 URL。所以我想创建一个项目来整合这些系统。由于所有系统都使用 Jersey 和 Spring,因此我可以创建一个过滤器(jersey),以在用户未被授权的情况下中止请求。

所以我们的想法是创建Integration System,它将是一个带有 Jerseys 过滤器的 JAR,并使用父配置(来自 Spring 的活动配置文件)来获取正确的 URL。我什至可以使用这个 JAR 来让 System BSystem D 通信,如果我能做到的话。

诀窍是,让这个 JAR 根据环境(在父项目上设置)获得正确的 .properties 文件。老实说,我不知道从哪里开始。

阅读我发现的 Spring Environment 文档:

如果更简单的方法可以完成工作,请不要使用配置文件。如果配置文件之间唯一的变化是属性的值,那么 Spring 现有的 PropertyPlaceholderConfigurer / 可能就是你所需要的。

我可以有 3 个不同的属性文件(开发、同源或生产),或者我可以有一个具有不同键的属性文件:

system.a.url.develpment=http://localhost:8080/systemA/authorize
system.a.url.homolog=http://localhost:8081/systemA/authorize
system.a.url.production=http://api.systemA.com/authorize

最好的方法是什么?你会怎么做?

【问题讨论】:

    标签: java spring environment spring-environment


    【解决方案1】:

    在这种“简单”的情况下,我只会使用属性文件来配置 url,并为不同的环境(dev、prod、..)使用不同的配置文件(同名属性),例如

    system.a.url=http://localhost:8081/systemA/authorize
    

    您可以手动管理您的属性文件(例如,在您的 jar/war 之外),或者您可以使用 maven profiles 为您的环境制作特定的 jar/war 文件。但我认为不需要弹簧型材。

    编辑:或者,您可以使用环境变量来“配置”特定于环境的设置(名称中的巧合:))。请注意,您也可以在一台机器内拥有不同的环境。有关更多详细信息,请检查例如this.

    export AUTH_URL="http://localhost:8081/systemA/authorize"
    

    【讨论】:

    • 后者使用 maven 配置文件创建不同的工件,恕我直言。您需要一个受信任的工件,然后将其移至不同的环境,因为这是您测试的,不能保证所有工件都完全相同。唯一可行的解​​决方案是使用外部属性文件并将其保存在众所周知的位置。
    • 我只需要一个 JAR。因为该 JAR 将成为所有系统的依赖项。这个 JAR 需要知道父项目在什么环境下工作,这样我才能得到正确的 URL。
    • 如果你只想要一个jar,那么你可以依赖外部配置。或者,您需要使用来自外部的任何输入(系统环境变量或 -Dparams)来定义您的环境或直接定义所需的 URL(取决于您是否有与一个环境相关的更多配置)
    • 问题是:环境需要来自项目本身。这是因为一台服务器将为该系统托管多个环境。例如:云服务器将托管“beta”和“production”。在这件事上,我需要 SystemA-Beta 告诉那个 jar 它处于“beta”状态,而 SystemA-Production 告诉那个 jar 它处于“生产”状态。
    • 恕我直言,在 jar 中定义所有“可能”环境不是灵活的解决方案……如果将来有任何变化(新服务器/新环境),您将无法重用该 jar。我会进行外部配置(通过定义的外部文件或通过环境变量)
    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2021-11-04
    • 2020-03-31
    • 2017-08-24
    • 2016-05-10
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多