从jar中包含的文件初始化H2 in-memory?

时间:2013-04-01 10:38:54

标签: java h2

如何将initialize H2 with a file包含在jar中?

目前我遇到了这个例外:

  

testCase(CheckTest):org.h2.jdbc.JdbcSQLException:IO异常:   “java.io.FileNotFoundException:   /Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql   (没有相应的文件和目录)”;   “!文件:/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-3.10-SNAPSHOT-tests.jar /h2_db.sql”;   SQL语句:(..)

我想用(h2_db.sql)初始化数据库的文件位于jar文件a-3.10-SNAPSHOT-tests.jar

代码看起来像

initSqlFile = getInitSqlFile();
//initSqlFile = "/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql"
//initSqlFile is a file contained ina jar, note the "!"

url = String.format(
      "jdbc:h2:mem:%s;MODE=PostgreSQL;LOCK_TIMEOUT=500;ifexists=true;INIT=runscript from '%s';DB_CLOSE_DELAY=-1;MVCC=TRUE",
       testSuitName, initSqlFile);

// later ...
con = DriverManager.getConnection(url, user, passwd);

虽然这个问题可以相对容易地解决,但我想知道H2是否支持从jar文件中的文件初始化。

或许是一种优雅的解决方法,并不意味着临时文件。



其他信息: 有一种方法可以查找资源,如果类路径中的resource is found方法返回resource's path。然后将资源的路径(/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql)作为参数传递给initializes the database的方法。

1 个答案:

答案 0 :(得分:0)

As documented, the file name must start with the zip: prefix

zip:/Users/user1/.m2/repository/a/3.10-SNAPSHOT/a-SNAPSHOT-tests.jar!/h2_db.sql