Spring-boot 使用 schema.sql 和 data.sql 填充 H2 数据库

问题描述 投票:0回答:2

我设置 Spring-boot 来使用 H2 内存数据库

application.properties
文件位于
/config
目录中 看起来这个文件已被处理

spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.path=/myconsole
spring.h2.console.enabled=true
spring.datasource.initialize=true
spring.datasource.schema=schema.sql
spring.datasource.data=data.sql

此文件已处理,控制台出现在

/myconsole
但是
schema.sql
data.sql
没有被处理并且 db 是空的。 我将
schema.sql
data.sql
文件都放在
/config
/src/main/resources
下。

SQL 语言指令是正确的,我可以使用控制台输入填充表格。

还有一个奇怪的事情是 即使我将 db 命名为

spring.datasource.url=jdbc:h2:mem:mydb

spring 控制台加载另一个数据库

testdb

o.s.j.d.e.EmbeddedDatabaseFactory --- Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

如何正确加载H2数据库?

spring-boot h2 spring-jdbc
2个回答
11
投票

解决了问题。

Spring Boot应用程序需要自己的jdbc依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

我所拥有的非启动依赖项还不够:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
</dependency>

没有“spring-boot-starter-jdbc”依赖 文件“application.properties”中的“spring.datasource.url”设置 没有被处理。 该文件实际上已被处理,但未处理 jdbc 设置。 Spring boot会在内存中创建自己的testdb,从而破坏了数据 关闭应用程序后。


0
投票

以下内容已过时;

spring.datasource.schema
spring.datasource.data

替代品是;

spring.sql.init.schemaLocations
spring.sql.init.dataLocations

相关类;

org.springframework.boot.sql.init.DatabaseInitializationSettings

通过spring-boot-autocinfigure-3.3.5.jarMETA-INF目录下的additional-spring-configuration-metadata.json检查替换。

Spring Boot版本:3.3.5

我不知道这个替换是从哪个版本开始的,但从 3.3.5 开始,情况如上。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.