可以将我的域特有的属性文件放在何处?

设想一种情形,您的应用程序需要根据其部署位置来配置资源,但您还希望"不经更改"就将该应用程序部署在其他环境中。一个简单的例子是,为应用程序指定一个工作目录,然后将该应用程序部署在开发、测试和生产环境中,但不希望将数据库用作您的配置组件。

域范围的属性文件是一个不错的解决方案。它不需要对 EAR 进行任何更改,独立于 DB,同时在重新部署后仍有效。

那么应该将这样一个文件放在何处?

属性文件在历史上是通过 Classloader.getResource 及其相关方法装入的。这意味着需要将属性文件放在类路径中。

在服务器上,只需将一些已知位置添加到服务器类路径,然后将属性文件放在那里。

但是已经存在一个特定于域的区域,用来存放对服务器类加载器可见的库和类。

让我们假设 $domain 相当于您的域目录(在通常的 Windows 安装中,它可能是默认域 C:\Sun\AppServer\domains\domain1)。

那么,用来部署您的属性文件的标准位置将是:

$domain/lib/classes

因此,可以将 examples.properties 放到此目录中,供您的应用程序使用。

为了访问此属性文件,您可以使用以下代码片段:

public Properties loadProperties() throws IOException {
    Properties prop = new Properties();
    InputStream is = this.getClass().getClassLoader().getResourceAsStream("examples.properties");
    if (is != null) {
        try {
            prop.load(is);
        }
        finally {
            // Forgetting to close input streams from property loaders
            // is a common source of resource leaks in applications.
            is.close();
        }
    }
    return prop;
}

此方法在 EJB 和 WAR 中都有效,因为 $domain/lib/classes 目录位于这两个组件的类路径中。


英文