基于文件的 h2 已保留,但未在 Spring Boot 中加载

2022-09-02 03:59:58

我基于Spring Boot制作了一个小应用程序:

  • 弹簧-启动器-起动器-腹板
  • spring-boot-starter-data-jpa

该应用程序只有一个域类 。因此,有一个 RestController 和一个 DAO。数据应该保存在基于文件的 hsql db 中。Post.java

当应用程序运行时,一切似乎都很好。存储数据。将创建 h2 文件并包含插入语句。

但是,当我杀死应用程序并再次启动它时。不加载任何数据。(就好像创建了一个全新的db文件,它覆盖了旧的db文件)。

应用程序.属性

spring.datasource.url = jdbc:h2:file:~/testdb
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.driverClassName = org.h2.Driver

啪.xml

<!-- Spring Boot Web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Boot Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- H2 DB -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.179</version>
</dependency>

邮政.java

public interface PostDAO extends JpaRepository<Post, Integer>{
    public Post findByMessage(String message);
}

帖子.java

@Entity
public class Post {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String message;

    public Post(){
    }

    public Post(String message) {
        super();
        this.message = message;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

答案 1

的默认值是(如果使用嵌入式数据库)。您可能希望它是空的,或者只是(也可以工作,但我认为休眠已经弃用了)。spring.jpa.hibernate.ddl-autocreate-dropvalidatenone


答案 2

推荐