如何关闭 h2 内存数据库?

Posted

技术标签:

【中文标题】如何关闭 h2 内存数据库?【英文标题】:How to close h2 in-memory database? 【发布时间】:2014-11-14 02:16:33 【问题描述】:

如果最后一个连接关闭,内存数据库将关闭。

问题是如何强制关闭内存手册?

因为我需要在连接断开或者DataSource不可用的情况下进行测试。在生产中,这一切都会发生,我想模拟测试中的情况。

【问题讨论】:

【参考方案1】:

好的,TCP+MEM+EMBEDED SERVER就是我想要的。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.tools.Server;
import org.junit.Before;
import org.junit.Test;

public class H2ServerDownTest


    private Server server;

    @Before
    public void startServer() throws SQLException
    
//        TCP server only.
        server = Server.createTcpServer("-tcp -webPort 8008 -tcpPort 9008 -properties null".split(" "));
        System.out.println("Start Server AT: " + server.getURL());
    

    @Test(expected = SQLException.class)
    public void test() throws SQLException
    
        server.start();
        Connection c = getConnection();
        Statement stmt = c.createStatement();
        stmt.execute("create table test(id int primary key, val varchar(100))");
        for (int i = 0; i < 1000; i++)
        
            if (i == 500)
            
                server.stop();
            
            stmt.execute("insert into test values(" + i + ", 'values')");
        
    

    public Connection getConnection() throws SQLException
    
        return DriverManager.getConnection("jdbc:h2:"+server.getURL()+"/mem:db", "sa", "");
    

    @Test
    public void shutdownServer()
    
        server.shutdown();
    

【讨论】:

以上是关于如何关闭 h2 内存数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 H2 内存数据库保存数据?

如何使用hibernate jpa在内存数据库中设置h2?

如何获取通过 H2DB 创建的“内存”数据库的流?

如何使用 H2 内存数据库编写单元测试

如何跨多个 Spring Boot 应用程序共享 H2 内存数据库?

如何在内存数据库中使用 H2 测试 EntityManager 查询