如何在 Spring Boot 中启用 H2 数据库服务器模式

Posted

技术标签:

【中文标题】如何在 Spring Boot 中启用 H2 数据库服务器模式【英文标题】:How to enable H2 Database Server Mode in Spring Boot 【发布时间】:2019-09-13 17:57:39 【问题描述】:

我正在使用带有 Spring Boot 文件的 H2 数据库。

在我的 application.properties 中,我有这个条目:

spring.datasource.url=jdbc:h2:file:c:/Testprojekte/spring-boot-h2-db

但是现在我希望能够在运行应用程序时查看数据库,目前这是不可能的,因为我需要让数据库在服务器模式下运行才能这样做。在文档中,我发现我必须将 AUTO_SERVER=TRUE 添加到 URL 但这并不能解决问题。

那么,为了能够同时从不同进程连接到该数据库,我需要进行哪些更改?

感谢您的帮助! 托尔斯滕

【问题讨论】:

【参考方案1】:

您可以将 H2 TCP 服务器作为 bean 启动:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <!-- <scope>runtime</scope> -->
</dependency>
@SpringBootApplication
public class Application 

    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

    @Bean(initMethod = "start", destroyMethod = "stop")
    public Server h2Server() throws SQLException 
        return Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
    

然后使用以下参数(密码 - 空)从您的 IDE 连接到它:

url: jdbc:h2:tcp://localhost:9092/mem:testdb
user: sa

更多信息是here 和here。

【讨论】:

我必须将它添加到 url:jdbc:h2:tcp://localhost:9090/~/database-name,因为我使用的是文件 h2 数据库。 如果 db 位于同一主机上,从性能角度来看,这不是一个好的选择,因为您使用内核调用和完整的 tcp 堆栈调用来访问 db。并且该配置不是访问 h2 控制台所必需的,它可以嵌入但带有额外的 h2 servlet【参考方案2】:

您可以使用浏览器中的 Web 界面启用 h2 Web 控制台以访问内存或文件数据库中的 h2。

为此添加 application.properties 行:

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

然后重新启动您的 Spring Boot 应用程序并使用您的浏览器检查 http://localhost:8080/h2-console

【讨论】:

以上是关于如何在 Spring Boot 中启用 H2 数据库服务器模式的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 Spring Boot 应用程序访问一个 Spring Boot 应用程序的内存 H2 数据库

spring-boot 文件系统中的持久 h2 数据库

在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?

如何在spring boot中创建H2+flyway测试数据库?

使用 H2 数据库自动创建的 Spring Boot

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