【问题标题】:Externalize properties in Tomcat将 Tomcat 中的属性外部化
【发布时间】:2016-03-16 09:27:34
【问题描述】:

我想将一系列与环境相关的设置配置为外部资源,以便可以在任何应用程序服务器中配置相同的 WAR 工件。

在 Glassfish 中,我记得我刚刚使用内置的 Properties Resource JNDI Factory 创建了一个 .properties 文件,它的工作原理非常棒,但在 Tomcat 中没有这样的东西。

我尝试定义一个 java.net.URL 和一个 java.lang.String 来定义这个文件所在的路径,但是我得到了以下错误:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/c://app.properties]

那么,为我的应用程序创建一组与环境无关的属性的好方法是什么?

PS:这就是我在 Spring 中定义属性的方式:

<jee:jndi-lookup id="appProperties" jndi-name="java:comp/env/url/urlAppProperties" />

        <bean id="application-properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <property name="locations">
                <list>
                    <value>#{ appProperties }</value>
                </list>
            </property>
        </bean>

【问题讨论】:

    标签: java tomcat jndi


    【解决方案1】:

    您可以使用 Tomcat 的资源配置元素将外部配置值添加到 JNDI 上下文。如Tomcat documentation 中所述,您可以在server.xml 中定义一个&lt;GlobalNamingResources&gt; 元素,列出一组可用于该服务器上所有上下文(Web 应用程序)的配置值:

    来自 Tomcat 文档的示例:

    <GlobalNamingResources ...>
      ...
      <Environment name="maxExemptions" value="10"
             type="java.lang.Integer" override="false"/>
      ...
    </GlobalNamingResources>
    

    这些环境变量随后可通过 JDNI 在 java:comp/env 上下文中使用。为了在 Web 应用程序中使用此类变量,您必须使用 &lt;ResourceLink&gt; 元素在单独的 context.xml 配置文件中链接到它们。

    <Context>
        <ResourceLink name="maxExemptions" global="maxExemptions" type="java.lang.Integer"/>
    </Context>
    

    通过此设置,您可以通过标准 JNDI API 访问这些值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 2019-09-08
      • 2015-06-26
      • 2015-07-30
      • 1970-01-01
      • 2021-11-08
      • 2017-08-14
      • 2012-07-13
      相关资源
      最近更新 更多