目前我的应用程序在Tomcat 6.0和Websphere Application Server 8.0上运行。
如何在WAR / EAR文件之外配置我的属性文件?
现在属性文件放在webapps/WEB-INF/
目录中,并在commons configuration framework
的帮助下访问它。
答案 0 :(得分:2)
由于您已经在使用commons配置API,它已经提供了类似于他们在documentation for optional configuration resources中解释的钩子。
从某种意义上说,这种方式非常强大,您的默认开箱即用配置仍然存在于Web应用程序本身中。但您仍然可以使用外部配置XML文件覆盖所需的任何属性。
在我们的项目中,我们通过提供一个使用System level属性将外部config.xml文件注入系统的工具来广泛使用它。我们做了类似下面的事情。
<configuration>
<header>
<result forceReloadCheck="true">
<nodeCombiner
config-class="org.apache.commons.configuration.tree.OverrideCombiner" />
</result>
</header>
<system/>
<configuration fileName="${ext.config}" forceReloadCheck="true" config-optional="true">
<reloadingStrategy refreshDelay="10000"
config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy" />
</configuration>
<configuration fileName="com/company/config/config.xml"></configuration>
</configuration>
此配置XML文件可确保您的webapp成功加载并具有开箱即用的配置,同时可选检查external.config系统属性,该属性可指向一个完整的替代配置覆盖Web应用程序中定义的任何任意属性。
答案 1 :(得分:0)
你可以
示例:
final Properties p = new Properties();
p.load(new FileInputStream(new File(System.getProperty("..."))));
您应该只从Web层(Servlet,JSP)读取它,而不是从EJB读取它。
对于WebSphere,您可以在控制台中添加特定于Web应用程序的属性。它隐藏得很深,寻找“应用服务器 - xxx - 流程定义 - JVM - 自定义属性”。
对于Tomcat,我不了解特定于Web应用程序的方法,但您可以在.../bin/setenv.sh
(setenv.bat
for Windows)中定义系统属性。我通常会添加一个唯一的前缀(例如应用程序的名称),以便它们不会干扰。
答案 2 :(得分:0)
您可以通过定义系统属性轻松实现这一点,让我们称之为configLocation
。应用程序应该读取系统属性指定的位置,而不是从类路径中读取属性文件。当然,您需要使用定义的系统属性启动Tomcat和WebSphere:-DconfigLocation=/path/to/config.properties
。
请注意,您还应该处理该文件不存在或无法读取的情况。可能的选项包括无法启动应用程序或退回到故障安全配置。