我从H2文档中看到您can open files on the classpath。
我在打开连接时尝试了各种URL(例如jdbc:h2:classpath:/myDatabase
),但似乎都找不到资源-但是当我尝试使用MyClass.class.getClassLoader().getResourceAsStream("myDatabase")
时,可以找到合适的资源。
数据库位于src\test\resources
中的类路径上。
有什么想法我在做什么错吗?
答案 0 :(得分:0)
您可以找到myDatabase
文件。在本地运行且未打包时,例如您可以在IDE内部执行以下操作:
URL res = MyClass.class.getResource("/myDatabase");
String url = "jdbc:h2:" + res.toString();
将输出完整的资源路径,例如jdbc:h2:file:/home/.../classes/myDatabase
当您将应用程序打包为JAR或WAR时,此方法将无效。在这种情况下,myDatabase
将打包在ZIP归档文件中,以引用this post:
压缩数据库和数据库中的数据库的主要问题 classpath是:您不能进行真正的随机访问。您只能阅读 流。需要随机访问,因此模拟如下: 当seek(pos)大于当前位置时,将跳过 (基本上是阅读)。如果搜索位置较小,则 流已关闭,然后重新打开。这非常慢。
基于Advanced > Pluggable File System docs的ZIP支持是只读的:
zip:基于只读zip文件的文件系统。格式:zip:/ zipFileName!/ fileName。
您可能应该使用命令行参数或系统变量来提供myDatabase
的路径,并将其保留在打包的应用程序之外。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您检查此链接,我认为可以解决您的问题。
在此链接中提供了Windows和Linus / mac classpath设置。
[1]: https://o7planning.org/en/11895/installing-h2-database-and-using-h2-console