内存数据库H2中的Spring Boot在初始化时不会从文件中加载数据

我在应用程序初始化时将数据加载到内存数据库中时遇到问题。我已经创建 和

含有表结构和初始数据文件。

CREATE TABLE users (

id INT PRIMARY KEY,

username VARCHAR(64) NOT NULL,

password VARCHAR(64)

);

和 :

INSERT INTO users (id, username, password) VALUES

(1, 'usr1', 'bigSecret'),

(2, 'usr2', 'topSecret');

我正在使用JpaRepository数据层:

public interface UserRepository extends JpaRepository<User, Long> {

}

而且我还配置了

spring.datasource.initialize=true

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

但是当我打电话

List<User> users = userRepository.findAll();

用户实体

@Entity

@Table(name = "users")

public class User {

@Id

@GeneratedValue

private Long id;

private String username;

private String password;

public User() { }

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

我得到一个空列表,但是应该从内存中的H2数据库中获得两个预先填充的用户。内存数据库有什么问题?谢谢。

回答:

您始终可以尝试按照h2的规范运行这些脚本,在该脚本中应在连接URL中添加INIT脚本(作为选项之一):

jdbc:h2:mem:test;INIT=RUNSCRIPT FROM '~/schema.sql'\;RUNSCRIPT FROM '~/data.sql'"

此功能通过INIT属性启用。请注意,可以将多个命令传递给INIT,但是必须转义分号分隔符,如下例所示。

请注意application.properties

spring.jpa.generate-ddl=true

spring.jpa.hibernate.ddl-auto=true

spring.datasource.initialize=true

在启动过程中可能会引起一些冲突。因此,您应该始终瞄准一个目标,但不要同时瞄准两个目标。对于简单的情况,仅这些就足以自动构建表并在关机和启动后重新加载

以上是 内存数据库H2中的Spring Boot在初始化时不会从文件中加载数据 的全部内容, 来源链接: utcz.com/qa/425552.html

回到顶部