2012-08-27 1 views
3

Grails 2.0의 장점 중 하나는 응용 프로그램 서버를 다시 시작하지 않고도 개발중인 도메인 클래스를 변경할 수 있다는 것입니다. 이것은 작동하지만 도메인 클래스를 변경하면 모든 부트 스트랩 데이터가 손실됩니다. 기본적으로이 목적을 달성 할 수 없습니다. 기본 h2 데이터베이스를 사용하고 있습니다.개발시 Grails 도메인 클래스를 변경할 때 DB 손실을 피하는 방법

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? Postgres와 같은 외부 DB로 가야합니까? 새로 만든 Grails는이 응용 프로그램에서

답변

6

기본 DataSource.groovycreate-drop 데이터베이스가 처음 때마다 응용 프로그램이 다시 시작에서 다시 생성된다는 것을 의미합니다

environments { 
    development { 
     dataSource { 
      dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', '' 
      url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
     } 
    } 

있습니다. 당신이 다시 시작에 걸쳐 지속 데이터베이스를 원하는 경우

dataSource { 
    dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' 
    url = "jdbc:h2:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000" 
} 

처럼 뭔가로 변경 (update에 즉 변화 create-dropurl에서 :mem 제거). 그러나 도메인 클래스에 적용 할 수있는 모든 변경 사항이 update이 적용 할 수있는 제한된 스키마 변경 내용에 반영 될 수있는 것은 아닙니다. 속성 추가는 정상적으로 수행되어야하지만 속성을 제거하거나 스키마 생성에 영향을주는 제약 조건을 변경하려면 어쨌든 데이터베이스를 삭제하고 다시 만들어야합니다 (응용 프로그램 중지, devDb 파일 삭제 및 다시 시작).

+0

감사합니다. 문제는 예를 들어 수정할 때입니다. Service 클래스를 사용하면 앱을 다시 시작할 필요가 없습니다. 그러나 분명히 Domain 클래스를 수정하면 DB를 삭제할 수 있지만 Bootstrap을 다시 실행하지 않을 정도로 재시작해야합니다. 나는 내가 부트 스트랩에서 다른 클래스로 로직을 이동시킨 다음 이벤트를 통해 재시작 할 때 스크립트를 실행할 수있는 드롭 다운 동작을 유지하려고하는지 추측한다. – Fletch