2011-10-10 23 views
6

Tôi đang xây dựng một ứng dụng Grails nhỏ và tôi đang cố gắng làm cho dữ liệu tồn tại giữa các lần khởi động lại máy chủ trong môi trường phát triển.Grails không lưu giữ dữ liệu DB của tôi

Tôi đã thay đổi một phần liên quan của DataSource.groovy như sau:

development { 
    dataSource { 
     dbCreate = "update" // one of 'create', 'create-drop','update' 
     url = "jdbc:hsqldb:mem:devDB" 
    } 
} 

Mỗi lần tôi khởi động lại máy chủ, tất cả các dữ liệu đã biến mất. Tôi có thiếu cấu hình khác không?

Tôi đã thử cả khi có và không có dữ liệu mẫu trong BootStrap.groovy (nếu điều đó tạo ra bất kỳ sự khác biệt nào).

+0

... bạn đang sử dụng phiên bản Grails nào? – vector

+0

@vector Cảm ơn, tôi đã xóa từ khóa 'mem'. Tất cả đang làm việc. – sim

+0

... vì vậy tôi đăng như là một câu trả lời sau đó :-) – vector

Trả lời

11

... thử bỏ phần 'mem' của chuỗi url: jdbc: hsqldb: devDB Ngay bây giờ bạn đang chạy db trong chế độ bộ nhớ, do đó mất dữ liệu. Chạy db trong chế độ nhúng nên làm những gì bạn cần.

+0

lưu ý rằng bản cập nhật db-create không xóa dữ liệu. Tôi đã tạo và sau khi xóa mem nó đã xóa dữ liệu, nhưng nhận ra rằng bản cập nhật db-create kết hợp với việc xóa mem, giải quyết vấn đề này – cyan

1

Bạn đang sử dụng cơ sở dữ liệu trong bộ nhớ, vì vậy không có cách nào cho dữ liệu tồn tại trong quá trình khởi động lại máy chủ. Chuyển sang một cơ sở dữ liệu dai dẳng (MySQL, Postgres, vv), sau đó đặt dbCreate = 'validate'

Ví dụ, giả sử bạn chọn MySQL như cơ sở dữ liệu của bạn, bạn sẽ cần phải thay đổi các thiết lập trong DataSource.groovy tới:

development { 
    dataSource { 
     dbCreate = "validate" 

     // Put the MySQL JDBC JAR on the classpath of your Grails app 
     driverClassName = "com.mysql.jdbc.Driver" 

     // Change these property values as needed 
     url = "jdbc:mysql://localhost/yourDB" 
     username = "yourUser" 
     password = "yourPassword" 
    } 
} 
+0

... bạn có nghĩa là PostgreSql khi nói 'đúng', phải không? – vector

1

Url của bạn được định cấu hình để sử dụng cơ sở dữ liệu trong bộ nhớ. Đó là những gì "mem" trong chuỗi url của bạn đề cập đến.

Tôi thấy dễ dàng hơn, đặc biệt là một dự án nhỏ để sử dụng BootStrap.groovy trong kết hợp w/dbCreate = "create-drop".

Bạn có thể thay đổi url của mình để trỏ đến tệp hoặc cơ sở dữ liệu quan hệ, nếu bạn muốn tiếp tục sử dụng BootStrap.groovy. Tôi đang sử dụng grails 2.0 w/an trong db bộ nhớ.

url = "jdbc: h2: db/devDb; auto_server = true"

Dưới đây là một ví dụ sử dụng MySQL (giả sử bạn có một trình điều khiển JDBC cho mysql có sẵn):

url = "jdbc: mysql : // localhost: 8080/foo autoreconnect = true"

Một ví dụ w/file:

url = "jdbc: HSQLDB: file:? prodDb; shutdown = true"

Hope this helps.

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