使用 Spring 从自定义 sql 加载 H2 源数据
Load H2 source data from custom sql with Spring
Spring 中的 H2 设置有问题。我将所有 sql 数据放入一个名为 data.sql 的文件中,但是当我将其更改为其他任何文件时 - 它无法被识别。知道如何设置多个单独的文件吗?
假设我有一个 table 用户并插入了一些数据,但目标是有 2 个单独的文件,例如user-schema 和 user-data,等等 - 具有相同数量插入数据文件的多个模式文件。
我目前的 spring.properties 看起来如下:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.path=/h2
我目前的 data.sql 看起来如下:
DROP TABLE IF EXISTS User;
CREATE TABLE User
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
surname VARCHAR(20) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(30) NOT NULL
);
INSERT INTO User (name, surname, role, email)
VALUES ('Thor', '', 'admin', 'thor@marvel.com'),
('Hulk', '', 'user', 'hulk@marvel.com'),
('Venom', '', 'user', 'venom@marvel.com'),
('Spider', 'Man', 'user', 'spider-man@marvel.com'),
('Super', 'Man', 'user', 'super-man@marvel.com');
如果您想将数据输入分离到多个文件中,您应该向 Spring 提供有关文件位置的信息:
spring.datasource.data=classpath*:sql/mock-*.sql
spring.datasource.initialization-mode=always
在我的项目中,我们将 .sql 文件保存在 resource/sql 文件夹中,每个文件名 mock-*.sql,如 mock-user.sql,mock- role-.sql 这就是我在路径中使用通配符的原因。无论如何,在 spring.datasource.data 中,您必须提供带有 sql 插入的文件路径。
spring.datasource.initialization-mode=always 告诉 Spring 始终从文件初始化数据库。您应该配置 属性 因为每次测试开始时您 "create-drop" 数据库。
Spring 有关数据和模式初始化的文档:https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/howto-database-initialization.html
Spring 中的 H2 设置有问题。我将所有 sql 数据放入一个名为 data.sql 的文件中,但是当我将其更改为其他任何文件时 - 它无法被识别。知道如何设置多个单独的文件吗?
假设我有一个 table 用户并插入了一些数据,但目标是有 2 个单独的文件,例如user-schema 和 user-data,等等 - 具有相同数量插入数据文件的多个模式文件。
我目前的 spring.properties 看起来如下:
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.path=/h2
我目前的 data.sql 看起来如下:
DROP TABLE IF EXISTS User;
CREATE TABLE User
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
surname VARCHAR(20) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(30) NOT NULL
);
INSERT INTO User (name, surname, role, email)
VALUES ('Thor', '', 'admin', 'thor@marvel.com'),
('Hulk', '', 'user', 'hulk@marvel.com'),
('Venom', '', 'user', 'venom@marvel.com'),
('Spider', 'Man', 'user', 'spider-man@marvel.com'),
('Super', 'Man', 'user', 'super-man@marvel.com');
如果您想将数据输入分离到多个文件中,您应该向 Spring 提供有关文件位置的信息:
spring.datasource.data=classpath*:sql/mock-*.sql
spring.datasource.initialization-mode=always
在我的项目中,我们将 .sql 文件保存在 resource/sql 文件夹中,每个文件名 mock-*.sql,如 mock-user.sql,mock- role-.sql 这就是我在路径中使用通配符的原因。无论如何,在 spring.datasource.data 中,您必须提供带有 sql 插入的文件路径。
spring.datasource.initialization-mode=always 告诉 Spring 始终从文件初始化数据库。您应该配置 属性 因为每次测试开始时您 "create-drop" 数据库。
Spring 有关数据和模式初始化的文档:https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/howto-database-initialization.html