Java 配置webapps的不同方法

Java 配置webapps的不同方法,java,tomcat,web-applications,configuration,Java,Tomcat,Web Applications,Configuration,我正在编写脚本,以便在Tomcat下部署应用程序。配置这些应用程序的方法有多种: 将属性文件保存在像WEB-INF这样的源目录中,这意味着我们需要提取源文件并用特定环境所需的文件替换这些文件 基于env属性的配置,这看起来是一个糟糕的选择,因为对我来说,文件更显式,更不神奇,在同一台机器上分离应用的工作更少 还有一些选项可以配置TOMCAT_HOME/conf/[app_name].xml,并在我们的应用程序中将这些属性视为环境变量。但是如果我们想这样做的话,就不可能移动到Jetty,因为这些

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

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

有人能提供其他选择并分享他们对上述问题的看法吗?考虑这些标准:配置的容易性、可移植性、标准、明确性(不喜欢魔术,其他人可能不理解它),OS(主要OS是Linux,但其他人可能想在Windows上运行它)。如果未设置此选项,应用程序将默认从/etc/{app_name}/conf加载。
大多数情况下,您不必设置环境。变量,因为您将使用默认目录。

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

我们在web应用程序中更喜欢此方法,原因如下:

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

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

您可以使用文件来使用基于环境属性的配置。我的意思是,您可以在web应用程序的META-INF下编写Context.xml文件,然后设置环境或配置


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

顺便说一句,该应用程序也可以从Windows启动。很好。但是,如果将配置放入数据库中,您仍然需要一些其他方式来设置配置选项。否则,您的应用程序从何处获取其DB参数?@sleske:嗯,数据库连接设置由应用程序的运行时环境处理,因此对于Tomcat来说,它是在context.xml中指定的,因此您的应用程序不必关心它,但是通过名称使用数据源,并且可以访问配置表来读取其属性。啊,很有趣。实际上,您可以通过context.xml将配置与数据库中的配置结合起来。@sleske:实际上,这是两件不同的事情。我为容器指定了一个数据源(在Tomcat的context.xml中完成),这使我的应用程序能够使用数据库,无论它需要它做什么。然后,我还将我的应用程序属性放入数据库中,并在启动时查询它们来使用它们,而不必将它们放入属性文件中。@ctapobep:在我们的例子中,它确实是一个企业web应用程序,但不限于此,它只取决于您的应用程序是否已经有数据库。通常,仅仅为此引入数据库并不值得,但如果您已经有了数据库,那么它是一个简单且易于维护的解决方案,适用于不同环境和运行时需要更改的情况。如果有人想部署您的WEB应用程序只是一次性的,我会选择WEB-INF解决方案中的属性文件。是的,这是配置WEB应用程序的推荐标准方法。注意context.xml可以在WAR之外(在
APACHE_INSTALL/conf/context.xml
下),这样管理员就可以在不影响WAR的情况下更改它。注意,使用上下文xml文件进行配置并不是Tomcat特有的。Jetty也可以使用它们:,JBoss也可以。它们实际上是(我相信)Servlet规范的一部分。非常有趣,谢谢,因为现在我认为这是最好的方式,因为我只需要保存几个[ AppMNE] .xml文件,并将它们放入Tomcat中,而不需要任何DBS或EnV设置。