2014-07-11 14 views
19

ho fatto una piccola applicazione basata su Spring Boot:File h2 basato persisteva, ma non caricato in primavera Boot

  • primavera-boot-starter-web
  • primavera-boot-starter-dati-JPA

L'applicazione ha una sola classe di dominio Post.java. Di conseguenza c'è un RestController e un DAO. Si suppone che i dati vengano mantenuti in un file hsql db basato su file.

Quando l'applicazione è in esecuzione, tutto sembra a posto. I dati sono memorizzati Il file h2 viene creato e contiene istruzioni di inserimento.

Tuttavia, quando si chiude l'applicazione e si avvia una seconda volta. Nessun dato è caricato. (Come se fosse stato creato un nuovo file db, che ha sovrascritto quello vecchio).

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

Potresti fornire pom.xml, application.properties e tutte le altre modifiche che hai apportato per farlo funzionare correttamente. Grazie. –

+0

In questo caso è sufficiente aggiungere 'spring.jpa.hibernate.ddl-auto = validate' al file application.properties. @SrkiRakic ​​ – qiubix

risposta

20

L'impostazione predefinita per spring.jpa.hibernate.ddl-auto è create-drop se si utilizza un database incorporato. Probabilmente vuoi che sia vuoto, o solo validate (none potrebbe funzionare bene, ma penso che sia deprecato da ibernazione).

+1

Era così. Grazie! Anche se pensavo che Spring avrebbe rilevato automaticamente il comportamento corretto: http://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/howto-database-initialization.html – Phil

Problemi correlati