0

我的 Java EE 应用程序包含许多子项目,它们应该使用单个配置文件来连接到数据库。我打算写一个Java类,做成一个独立的jar,用来读取数据库连接参数datasource.xml,放到独立jar的路径上。

我想问的问题:

  1. 如何动态获取的绝对路径datasource.xml
  2. 第一个问题的解决方案可以在所有操作系统(如 UNIX 等)中运行吗?
4

3 回答 3

2

您必须处理的第一个主题是存储该文件的位置。

根据您的问题,您将把文件存储在文件系统的某个位置,在实际应用程序包的外部。因此,您绝对必须知道文件在文件系统上的真正位置才能访问它;你不能提前结束它,除非你使用环境变量来指示你的代码文件所在的位置。

一种更好的方法是将您的 XML 文件与 JAR 打包在一起。然后,您不必再担心绝对路径。只需使用Thread.currentThread().getContextClassLoader().getResource(),提供资源的包样式路径,您就会在任何可能找到的地方获得对它的引用。

如果您无法将文件与 JAR 一起打包,则可以将其存储在文件系统上的目录中,并将该目录添加到服务器的类路径查找序列中;一些应用服务器支持这一点。然后,您仍然可以使用类加载器来查找资源,而无需知道其绝对位置。

于 2012-11-22T03:39:40.163 回答
0

那这个呢?在运行时将相对路径转换为绝对路径..我想这应该适用于所有环境......

File a = new File("/some/abs/path");
File parentFolder = new File(a.getParent());
File b = new File(parentFolder, "../some/relative/path");
String absolute = b.getCanonicalPath(); // may throw IOException

问候

于 2012-11-22T03:11:33.263 回答
0

您可以使用环境变量

String path = System.getEnv("MYVARIABLE");
File datasource = path + "/datasource.xml";

或者从固定位置中可用的属性文件中读取位置

Properties props = new Properties();
try {
    props.load("MyFixed.properties");
} catch(Exception e) {
    e.printStackTrace(); // Can do better
}
String path = props.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

或者在使用 -D 启动 Jar 时传入 VM 参数

String path = System.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

并打电话给

java -jar -Ddatasource.path=/my/path/to/datasource.xml my.jar
于 2012-11-22T03:11:38.707 回答