2014-07-11 9 views
19

Zrobiłem małą aplikację opartą na wiosennym boot:pliku h2 oparty trwało ale nie załadowany wiosną Boot

  • wiosna-boot-rozrusznik-web
  • wiosna-boot-rozrusznik-data-WZP

Aplikacja ma po prostu jedną klasę domeny Post.java. W związku z tym istnieje RestController i DAO. Dane powinny być przechowywane w pliku hsql db.

Gdy aplikacja jest uruchomiona, wszystko wydaje się być w porządku. Dane są przechowywane. Plik h2 jest tworzony i zawiera instrukcje wstawiania.

Jednak, gdy zabiję aplikację i uruchomię ją po raz drugi. Żadne dane nie są ładowane. (Tak jakby powstał całkiem nowy plik db, który zastąpił stary).

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

Czy możesz podać zaktualizowany plik pom.xml, application.properties i wszelkie inne zmiany, które wprowadziłeś, aby to działało. Dzięki. –

+0

W tym przypadku wystarczy dodać 'spring.jpa.hibernate.ddl-auto = validate' do pliku application.properties. @SrkiRakic ​​ – qiubix

Odpowiedz

20

Domyślną spring.jpa.hibernate.ddl-auto jest create-drop jeśli używasz wbudowanej bazy danych. Prawdopodobnie chcesz, aby był pusty lub po prostu validate (none może również działać, ale myślę, że jest przestarzałe przez hibernacji).

+1

To było to. Dzięki! Mimo że założyłem, że Spring automatycznie wykryje prawidłowe zachowanie: http://docs.spring.io/spring-boot/docs/1.0.RELEASE/reference/html/howto-database-initialization.html – Phil

Powiązane problemy