2014-10-08 2 views
2

책에서 작은 grails 응용 프로그램을 개발 중이며 필요한 첫 단계는 데이터베이스에 초기 데이터를 제공하는 것입니다. GroovyConsole을 사용하면 스크립트가 실행되지만 데이터를 유지하지 않습니다. 내가 콘솔에서 스크립트를 실행하면grails 응용 프로그램의 초기 데이터

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

을 다음과 같이

DataSource.groovy 환경 설정 result 반환 NULL이다. 응용 프로그램에 GGTS를 사용하고 있지만 GGTS에서 초기 데이터를 유지하는 방법을 모르므로 명령 프롬프트에서 grails console 명령을 실행했습니다. 이것이 올바른 방법일까요? GGTS에서 직접 할 수 있습니까?

추신 : 나는이 질문이 Seed data for grails application 인 것을 보았지만, 지금 내가 어디에 있고 무엇이 필요한지에 대해 너무 진전 된 것으로 보인다.

감사

답변

3

당신이 필요가 BootStrap.groovy에서 실행되는 insert -statements와 SQL 파일 준비 :

class BootStrap { 

    def dataSource 

    def init = { servletContext -> 
    Sql sql = new Sql(dataSource) 
    new File(pathToSql).eachLine{ sql.executeInsert it } 
    sql.commit() 
    sql.close() 
    } 
} 

는 간단하다, 안 그래?

3

나는 아주 다른 접근 방법을 제안합니다. 예를 들어,라는 서비스를 만듭니다. BootstrapInitialDataServiceinitData()이라는 한 가지 방법이 있습니다. 이 클래스에서 인터페이스를 추출하는 것이 좋습니다 (예 : InitialDataService). 개발 및 프로덕션 환경에 다른 구성 요소 bean을 쉽게 정의 할 수 있습니다. 이 initData() 메서드에서는 모든 도메인 객체를 만들 수 있지만 데이터베이스에 이미 존재하는지 먼저 확인해야합니다. 당신의 initialDataService 콩 명시 적으로 정의 할 수 resources.groovy 파일에서

class Bootstrap { 

def initialDataService 

def init = { 

    initialDataService.initData() 
} 

:

beans = { 
    //.... other beans definition goes here 

    initialDataService(your.package.BootstrapInitialDataService) 
} 
을이 작업을 수행 할 때, Bootstrap.groovy에서이 서비스를 주입하고, 부트 스트랩의 init 폐쇄에 initData()를 실행

init 데이터 부트 스트랩 로직을 변경하기로 결정했다면, 단순히 새로운 빈을 정의하고 resources.groovy의 정의를 대체하면됩니다. 나머지는 동일하게 유지됩니다. 환경 스위치를 사용하여 다른 환경에있는 다른 콩을 주입 할 수도 있습니다. 매우 강력한 이점입니다.

관련 문제