example java maven hsqldb h2 spring-boot

java - example - spring boot jdbc h2



El archivo basado en h2 persistió pero no se cargó en Spring Boot (1)

Hice una pequeña aplicación basada en Spring Boot:

  • arranque-arranque-inicio-web
  • spring-boot-starter-data-jpa

La aplicación tiene simplemente una clase de dominio Post.java . En consecuencia, hay un RestController y un DAO. Se supone que los datos deben persistir en un archivo basado en db hsql.

Cuando la aplicación se está ejecutando todo parece estar bien. Los datos se almacenan. El archivo h2 se crea y contiene instrucciones de inserción.

Sin embargo, cuando mato la aplicación y la inicio una segunda vez. No hay datos cargados. (Como si se creara un nuevo archivo db, que sobrescribió el anterior).

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; } }


El valor predeterminado para spring.jpa.hibernate.ddl-auto es create-drop si utiliza una base de datos integrada. Probablemente quiera que esté vacío, o simplemente validate ( none podría funcionar tan bien, pero creo que está en desuso por hibernación).