Spring Boot中嵌入的H2数据库的默认名称是什么?

dea*_*mon 2 java spring jdbc h2 spring-boot

正如我所读到的,Spring Boot 中嵌入式 H2 数据库的默认名称应该是testdb,但是如果我尝试使用 H2 控制台连接,则会收到以下错误:

未找到数据库“mem:testdb”,请预先创建它或允许远程创建数据库(不建议在安全环境中使用)

application.properties仅当我使用以下参数显式设置名称时,它才有效:

spring.datasource.url=jdbc:h2:mem:testdb
Run Code Online (Sandbox Code Playgroud)

由于应用程序无需此配置即可连接到嵌入式数据库,因此必须有一个不同的默认名称。但是自动配置的数据库的默认名称是什么?

Man*_*ubi 5

正如 jurez 所说,在 application.properties 中启用 h2 控制台

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.jpa.show-sql=true
Run Code Online (Sandbox Code Playgroud)

然后当您在控制台中运行应用程序时,您将看到如下内容:

H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:2f5b7da9-0cd2-4fdd-98d2-5ef5f76391bc'
Run Code Online (Sandbox Code Playgroud)

然后您可以使用此 JDBC URL 从 h2-console 连接到数据库

http://localhost:8080/h2-console

jdbc:h2:mem:2f5b7da9-0cd2-4fdd-98d2-5ef5f76391bc
Run Code Online (Sandbox Code Playgroud)

您可以通过在 application.property 文件中添加以下属性来指定您自己的名称

spring.datasource.url=jdbc:h2:mem:testdb
Run Code Online (Sandbox Code Playgroud)

请记住,由于这是一个内存数据库,每次运行应用程序时都会删除并重新创建它

h2 也有持久模式,但不推荐,您可以通过在内存数据库中添加以下教程Spring Boot 和 H2 中的以下配置来实现 - 为什么、什么和如何?

spring.datasource.name=yourdbname
spring.datasource.driverClassName=org.h2.Driver
 
spring.datasource.initialize=false
spring.datasource.url=jdbc:h2:file:~/yourdbname;DB_CLOSE_ON_EXIT=FALSE;IFEXISTS=TRUE;DB_CLOSE_DELAY=-1;
 
spring.jpa.hibernate.ddl-auto = update
Run Code Online (Sandbox Code Playgroud)