我想将一系列依赖于环境的设置配置为外部资源,以便可以在任何应用程序服务器中配置相同的WAR工件。
在Glassfish中,我记得我刚刚使用内置的属性资源JNDI工厂创建了一个.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>
答案 0 :(得分:0)
您可以使用Tomcat的资源配置元素将外部配置值添加到JNDI上下文。如Tomcat documentation中所述,您可以在<GlobalNamingResources>
中定义一个server.xml
元素,其中列出了一组配置值,这些配置值可供该服务器上的所有上下文(Web应用程序)使用:
取自Tomcat文档的示例:
<GlobalNamingResources ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</GlobalNamingResources>
然后可以通过java:comp/env
上下文中的JDNI获取这些环境变量。要在Web应用程序中使用此类变量,您必须使用context.xml
元素在各个<ResourceLink>
配置文件中链接它们。
<Context>
<ResourceLink name="maxExemptions" global="maxExemptions" type="java.lang.Integer"/>
</Context>
通过此设置,您可以通过标准JNDI API访问这些值。