【问题标题】:Different ways of configuring webapps配置 webapps 的不同方式
【发布时间】:2012-10-02 23:47:03
【问题描述】:

我正在编写脚本以在 Tomcat 下部署应用程序。有多种配置这些应用的方法:

  • 将属性文件保存在诸如 WEB-INF 之类的源目录中,这意味着我们需要提取源并将这些文件替换为特定环境所需的文件
  • 基于 env 属性的配置,这对我来说似乎是一个糟糕的选择,文件更明确且不那么神奇,并且在同一台机器上分离应用程序的工作更少
  • 还有一些选项可以配置 TOMCAT_HOME/conf/[app_name].xml 并将这些属性视为我们应用程序中的环境变量。但是通过这种方式,如果我们想要移动到 Jetty 是不可能的,因为这些文件是 Tomcat 特定的。

有人可以提供其他选项并就上面列出的内容分享他们的意见吗?考虑以下标准:易于配置、可移植性、标准、明确性(不喜欢魔术,其他人可能不理解)、操作系统(主要操作系统是 Linux,但其他人可能希望在 Windows 上运行它)。

【问题讨论】:

  • 请注意,使用上下文 XML 文件进行配置不是特定于 Tomcat。 Jetty 也可以使用它们:enavigo.com/2008/08/29/deploying-a-web-application-to-jetty,JBoss 也可以。它们实际上(我相信)是 Servlet 规范的一部分。
  • 非常有趣,谢谢,目前我认为这是最好的方法,因为我只需要保留几个 [app_name].xml 文件并将它们放入 Tomcat 中,而无需任何数据库或环境设置。

标签: java tomcat web-applications configuration


【解决方案1】:

我建议将属性放入数据库表中(这当然意味着您的应用程序具有数据源)。

我们更喜欢在我们的网络应用程序中使用这种方法,原因如下:

  • 属性与已部署的工件和应用程序的安装目录分开
  • 可以通过数据库工具轻松访问人员
  • 属性可以具有其他属性,例如类型或默认值
  • 可以在运行时轻松更改属性(前提是 Web 应用程序有一些管理页面可以重新加载它们)
  • 根据环境(例如开发、测试、生产),您可以拥有不同的属性集并以与其他主数据相同的方式加载它们

如果您根本没有数据库,另一种解决方案是使用系统属性并通过 System.getProperty(key) 读取它们,这对于您控制下的系统来说是可以的,并且没有太多属性。

【讨论】:

  • 好点。但是,如果您将配置放入数据库,您仍然需要其他方式来设置配置选项。否则,您的应用从哪里获取其数据库参数?
  • @sleske:嗯,数据库连接设置是由应用程序的运行时环境处理的,因此对于 Tomcat 来说,它是在 context.xml 中指定的,因此您的应用程序不必关心它,但按名称使用数据源,并且可以访问配置表以读取其属性。
  • 啊有趣。因此,您实际上通过 context.xml 将配置与 DB 中的配置结合起来。
  • @sleske:实际上,这是两件不同的事情。我为容器指定了一个数据源(在 Tomcat 的 context.xml 中完成),这使我的应用程序能够使用数据库,无论它需要什么。然后我还将我的应用程序属性放入数据库中,并通过在启动时查询它们来使用它们,而无需将它们放入属性文件中。
  • @ctapobep:在我们的例子中,它确实是一个企业 Web 应用程序,但不限于此,它只取决于您的应用程序是否已经拥有数据库这一事实。仅仅为此而引入数据库通常是不值得的,但如果您已经拥有一个数据库,那么对于您有不同环境以及在运行时需要更改的情况,它是一种简单且易于维护的解决方案。如果有人想要部署您的 web 应用程序只是一次性的事情,我会在 WEB-INF 解决方案中寻找属性文件。
【解决方案2】:

您可以通过使用文件来使用基于 env 属性的配置。我的意思是,您可以在 Web 应用程序的 META-INF 下编写一个 Context.xml 文件,按照 rules 设置环境或配置。

我发现使用 env 属性提供了简单的配置,基于上下文和依赖注入。您可以使用新的 java API,例如。 @Resource 注释。它可以在任何应用服务器等下工作。

【讨论】:

  • 是的,这是配置 Web 应用程序的推荐标准方法。请注意,context.xml 可以在 WAR 之外(在 APACHE_INSTALL/conf/context.xml 下),这样管理员就可以更改它而不会弄乱 WAR。
【解决方案3】:

根据我的经验,使用 conf 目录的环境变量:{APP_NAME}_CONF_DIR 效果很好。如果未设置,应用程序将默认从 /etc/{app_name}/conf 加载。 大多数情况下,您不必设置环境。变量,因为您将使用默认目录。

【讨论】:

  • 顺便说一句,该应用程序也可以从 Windows 启动。
猜你喜欢
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2020-04-02
  • 2011-03-16
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多