我的 Java EE 应用程序包含许多子项目,它们应该使用单个配置文件来连接到数据库。我打算写一个Java类,做成一个独立的jar,用来读取数据库连接参数datasource.xml
,放到独立jar的路径上。
我想问的问题:
- 如何动态获取的绝对路径
datasource.xml
? - 第一个问题的解决方案可以在所有操作系统(如 UNIX 等)中运行吗?
您必须处理的第一个主题是存储该文件的位置。
根据您的问题,您将把文件存储在文件系统的某个位置,在实际应用程序包的外部。因此,您绝对必须知道文件在文件系统上的真正位置才能访问它;你不能提前结束它,除非你使用环境变量来指示你的代码文件所在的位置。
一种更好的方法是将您的 XML 文件与 JAR 打包在一起。然后,您不必再担心绝对路径。只需使用Thread.currentThread().getContextClassLoader().getResource()
,提供资源的包样式路径,您就会在任何可能找到的地方获得对它的引用。
如果您无法将文件与 JAR 一起打包,则可以将其存储在文件系统上的目录中,并将该目录添加到服务器的类路径查找序列中;一些应用服务器支持这一点。然后,您仍然可以使用类加载器来查找资源,而无需知道其绝对位置。
那这个呢?在运行时将相对路径转换为绝对路径..我想这应该适用于所有环境......
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
问候
您可以使用环境变量
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