我的Java EE应用程序包含许多子项目,这些子项目应使用单个配置文件连接到数据库。我打算编写一个Java类,并使其成为一个独立的jar来读取datasource.xml
中的数据库连接参数,这些参数将放在独立jar的路径上。
我想问的问题:
datasource.xml
的绝对路径?答案 0 :(得分:2)
您必须处理的第一个主题是存储该文件的位置。
根据您的问题,您将在文件系统的某处将文件存储在实际应用程序包的外部。因此,您绝对必须知道文件在文件系统中的真正位置才能访问它;除非您使用环境变量来指示文件所在的代码,否则您无法事先得出结论。
更好的方法是使用JAR打包XML文件。然后,您不必再担心绝对路径了。只需使用Thread.currentThread().getContextClassLoader().getResource()
,提供资源的包式路径,您就可以在任何地方找到它的引用。
如果无法将文件与JAR一起打包,则可以将其存储在文件系统的目录中,并将该目录添加到服务器的类路径查找序列中;一些应用服务器支持它。然后,您仍然可以使用类加载器来查找资源,而无需知道其绝对位置。
答案 1 :(得分: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
问候
答案 2 :(得分: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