2

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

4

3 回答 3

2

由于您已经在使用公共配置 API,它已经提供了一个钩子,就像他们在下面的文档中解释的可选配置资源一样。

从某种意义上说,这种方式非常健壮,因为您的默认开箱即用配置仍然驻留在 Web 应用程序本身中。但是您仍然可以使用外部配置 XML 文件覆盖您想要的任何属性。

在我们的项目中,我们通过提供一种使用系统级属性将外部 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 中定义的任何任意属性应用。

于 2013-07-26T11:54:13.327 回答
0

你可以

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

例子:

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对于 Windows)中定义系统属性。我通常会在前面加上一个唯一的前缀(例如应用程序的名称),这样它们就不会干扰。

于 2013-07-26T11:42:08.433 回答
0

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

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

于 2013-07-26T11:42:20.787 回答