基于文件的h2持久但未在Spring Boot中加载

时间:2014-07-11 18:16:04

标签: java maven hsqldb h2 spring-boot

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

  • 弹簧引导起动的Web
  • 弹簧引导起动数据JPA

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

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

然而,当我杀死应用程序并再次启动它时。没有加载数据。 (好像创建了一个全新的db文件,它覆盖了旧文件)。

application.properties

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

的pom.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>

PostDAO.java

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

Post.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 个答案:

答案 0 :(得分:26)

如果您使用嵌入式数据库,spring.jpa.hibernate.ddl-auto的默认值为create-drop。您可能希望它为空,或者只是validatenone可能也可以正常工作,但我认为hibernate已弃用它。)