【发布时间】:2021-05-16 06:44:23
【问题描述】:
我使用 Spring 5.1.17、H2(内存中)数据库 1.4.200 和 Hibernate。
我使用 H2 内存数据库进行测试,并在每次测试后尝试重置它。为此,我使用 Liquibase 创建我的数据库并生成一个 .sql 文件。所以我的计划是,在每次测试之后,我通过执行这个 .sql 文件来初始化一个新的内存数据库。为此,我不想删除所有表(因为时间)。
我只想关闭数据库并创建一个新的内存数据库,我可以通过执行 sql 文件(在每次测试之前)来初始化它。为此,我需要通过执行 SQL 语句SHUTDOWN 来关闭数据库。然后我得到以下日志:
2021-02-12 12:59:57 database: disconnecting session #14
2021-02-12 12:59:57 database: disconnected session #14
2021-02-12 12:59:57 database: disconnecting session #3
2021-02-12 12:59:57 database: disconnected session #3
...
2021-02-12 12:59:57 database: disconnecting session #15
2021-02-12 12:59:57 database: closing mem:test
2021-02-12 12:59:57 database: closed
2021-02-12 12:59:57 database: disconnected session #15
看起来不错。现在我尝试使用相同的 url 连接到(新的)内存数据库:
...
String url = jdbc:h2:mem:test;MODE=MSSQLServer;INIT=runscript from 'myPath/initFile.sql';DB_CLOSE_DELAY=0";
connection = DriverManager.getConnection(url, user, pass);
但这不起作用! 它仅在我之前没有关闭数据库时才有效。因此,当我运行我的 spring 应用程序(使用 dataSource bean)并使用 sql 文件而不是 Liquibase 更改日志初始化数据库时,我得到以下日志并且我的测试将正确通过:
/*SQL #:104 t:152*/runscript from 'myPath/initFile.sql';
2021-02-12 13:07:42 command: slow query: 152 ms
/**/Connection conn6 = DriverManager.getConnection("jdbc:h2:mem:test;INIT=runscript from 'myPath/initFile.sql';MODE=MSSQLServer;DB_CLOSE_DELAY=0", "username", "");
但是当我第一次运行测试,关闭数据库并尝试连接和初始化新数据库时,我没有得到任何日志,接下来的测试都将失败,因为没有表。所以似乎不会创建新的数据库。我的错误是什么?或者这不可能我尝试做的?
【问题讨论】:
标签: java sql sql-server spring h2