从war / ear之外访问多个应用程序服务器的属性文件

时间:2013-07-26 11:32:26

标签: java java-ee properties apache-commons

目前我的应用程序在Tomcat 6.0和Websphere Application Server 8.0上运行。
如何在WAR / EAR文件之外配置我的属性文件?
现在属性文件放在webapps/WEB-INF/目录中,并在commons configuration framework的帮助下访问它。

3 个答案:

答案 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)

你可以

  1. 使用在Web应用程序级别定义的属性指向文件(这样数据中心可以更改位置)
  2. 直接阅读(不需要额外的库)
  3. 示例:

    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.shsetenv.bat for Windows)中定义系统属性。我通常会添加一个唯一的前缀(例如应用程序的名称),以便它们不会干扰。

答案 2 :(得分:0)

您可以通过定义系统属性轻松实现这一点,让我们称之为configLocation。应用程序应该读取系统属性指定的位置,而不是从类路径中读取属性文件。当然,您需要使用定义的系统属性启动Tomcat和WebSphere:-DconfigLocation=/path/to/config.properties

请注意,您还应该处理该文件不存在或无法读取的情况。可能的选项包括无法启动应用程序或退回到故障安全配置。