【问题标题】:How do I Supply Complex Runtime Parameters to Tomcat?如何向 Tomcat 提供复杂的运行时参数?
【发布时间】:2012-03-09 18:09:39
【问题描述】:

我正在编写一个由 Tomcat 6 托管的 JSF 2.1 Web 应用程序。

在运行时,我想检索一组与外部服务相关的复杂参数。

在开发时,我不知道这些参数会是什么,也不知道会是什么。

这些参数将由我们的操作人员设置,因此必须在 .war 文件之外定义。

我认为 context.xml 会有所帮助(即TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml),但这只能接受标量参数,而且我似乎没有任何方法可以迭代它们。

这是我想在运行时访问的示例。

<services>
    <service id="bbc" name="BBC Weather" url="http://www.bbc.co.uk/weather/" />

    <service id="underground" name="Weather Underground" url="http://www.wunderground.com/weather/api/">
        <login username="test" password="test" />
    </service>

    <service id="network" name="The Weather Network" url="http://www.theweathernetwork.com/">
        <method type="post" />
    </service>
</services>

有没有一种万无一失的方法可以以编程方式访问TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml?我知道how to get the path to TOMCAT_HOME,但我们的运维人员可能会选择更改 Tomcat 主机或引擎名称。

作为一种解决方法,我总是可以将单个参数写入 context.xml,如下所示。

<Parameter name="config.file" value="C:/Program Files/Apache Software Foundation/Tomcat 6.0/conf/Catalina/localhost/MyConfigFile.xml" />

但这也是一个额外的错误点,安装说明中的一个额外步骤,需要维护等。

我确信一定有一个简单的方法可以做到这一点,我错过了什么?

提前致谢,亚当。

【问题讨论】:

    标签: jakarta-ee servlets configuration jsf-2 tomcat6


    【解决方案1】:

    创建您自己的 XML 文件并将其放在 Tomcat 的默认运行时类路径所涵盖的现有路径之一中,例如 Tomcat/lib,或者通过在 Tomcat 的 /conf/catalina.propertiesshared.loader 属性中指定其路径来将其路径添加到运行时类路径中.

    一旦它在类路径中,您就可以通过类加载器获取它。

    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    InputStream input = loader.getResourceAsStream("services.xml");
    // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2020-10-23
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      相关资源
      最近更新 更多