【问题标题】:Properties for dev and production开发和生产属性
【发布时间】:2010-12-09 22:03:27
【问题描述】:

我有一个 GlassFish/j2ee 应用程序,我在一个盒子上进行开发,而生产是一个远程盒子。 我有一个制作文件的功能,我需要文件的位置根据我的开发盒或生产而有所不同。 什么是自动切换的方法,这样我就不必根据部署位置来编辑源文件?

【问题讨论】:

  • 这些文件是相对于您的网络应用的安装目录还是在部署目录之外?

标签: java deployment configuration


【解决方案1】:

您可以在此配置文件中使用properties 文件并外部化特定于环境的内容(例如您的“文件位置”)。在构建时将足够的值放入其中(例如,将 filtering and profiles 与 Maven 一起使用)。将此文件包含在应用程序中或使其在类路径中的某个位置可用。

【讨论】:

    【解决方案2】:

    最简单的方法是定义一个系统属性,该属性指定数据的文件系统位置。生产应用服务器将定义一个值(在启动脚本中使用java -D),而您的开发应用服务器将定义另一个值。您的应用程序源将查询系统属性值(使用System.getProperty())以发现适当的位置。

    【讨论】:

    • 系统属性是全局的。这是一个养成的坏习惯(一个不得不撤消对库中 System.properties 的使用的人说,该库来自仅由一个人使用的独立应用程序,到许多人使用的 Web 应用程序 - 哦,回忆)
    • 是的,它们对 JVM 来说是全局的。你是在告诉我你会在同一个 JVM 中混合生产和非生产应用程序吗?在大多数情况下,我同意,使用系统属性是一个糟糕的举动,但这种事情正是系统属性的用途。
    • 假设您的应用程序服务器只运行一个需要知道存储文件夹的网络应用程序。在网络应用上下文中设置属性可能会更好。
    • 将配置放在 webapp 上下文中比在源代码中撅嘴好不了多少。您不想弄乱应用程序的内部结构。如果你在同一个 JVM 中有多个 webapp,那么使用不同的系统属性来配置它们。
    • 我添加了一个系统属性“foo”,并将值设置为“/me/bar/”。在代码中,我尝试通过以下方式访问: String dir= System.getProperty("foo");但它返回空值。我是否正确使用它?
    【解决方案3】:

    将您需要的信息放入 JNDI - 这就是它的设计目的。

    如果信息不存在,请考虑让您的应用程序拒绝执行任何操作。

    【讨论】:

      【解决方案4】:

      本质上,您正在尝试存储随环境而变化的任意数据。如果您目前在您的应用程序(即数据库)中执行此操作,我会将其放在那里。

      【讨论】:

      • 如果您尝试将 PROD 数据库同步到 DEV 并破坏那里的自定义设置,这将是一个问题。
      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2017-05-25
      • 2013-09-01
      • 2012-06-01
      • 2012-04-15
      • 1970-01-01
      相关资源
      最近更新 更多