2014-07-11 22 views
19

tôi đã thực hiện một ứng dụng nhỏ dựa trên mùa xuân Boot:tập tin dựa h2 vẫn kiên trì nhưng không được nạp trong mùa xuân Boot

  • mùa xuân-boot-khởi-web
  • mùa xuân-boot-khởi-data-JPA

Ứng dụng này chỉ đơn giản là một lớp miền Post.java. Theo đó có một RestController và một DAO. Dữ liệu được cho là tồn tại trong một tệp dựa trên db hsql.

Khi ứng dụng đang chạy mọi thứ có vẻ ổn. Dữ liệu được lưu trữ. Tệp h2 được tạo và chứa các câu lệnh chèn.

Tuy nhiên, khi tôi xóa ứng dụng và khởi động lại lần thứ hai. Không có dữ liệu nào được tải. (Như thể một tệp db hoàn toàn mới đã được tạo, ghi đè tệp cũ).

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

Bạn có thể vui lòng cung cấp tệp pom.xml, application.properties được cập nhật và bất kỳ thay đổi nào khác bạn đã thực hiện để làm việc này. Cảm ơn. –

+0

Trong trường hợp này, bạn chỉ cần thêm 'spring.jpa.hibernate.ddl-auto = validate' vào tệp application.properties của bạn. @SrkiRakic ​​ – qiubix

Trả lời

20

Giá trị mặc định cho spring.jpa.hibernate.ddl-autocreate-drop nếu bạn sử dụng một cơ sở dữ liệu nhúng. Bạn có thể muốn nó trống hoặc chỉ validate (none cũng có thể hoạt động nhưng tôi nghĩ điều đó không được chấp nhận bởi chế độ ngủ đông).

+1

Đó là nó. Cảm ơn! Mặc dù tôi cho rằng Spring sẽ tự động phát hiện hành vi chính xác: http://docs.spring.io/spring-boot/docs/1.0.1.RELEASE/reference/html/howto-database-initialization.html – Phil

Các vấn đề liên quan