可以将我的域特有的属性文件放在何处? 设想一种情形,您的应用程序需要根据其部署位置来配置资源,但您还希望"不经更改"就将该应用程序部署在其他环境中。一个简单的例子是,为应用程序指定一个工作目录,然后将该应用程序部署在开发、测试和生产环境中,但不希望将数据库用作您的配置组件。 域范围的属性文件是一个不错的解决方案。它不需要对 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 目录位于这两个组件的类路径中。
英文
|