2014-03-27 40 views
1

如何防止在grails應用程序中引導數據。當我們配置了DataSource.groovy中這樣防止在grails數據源更新模式下引導數據

development { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost:3306/test" 
     pooled = true 
     driverClassName = "com.mysql.jdbc.Driver" 
     dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
     username = "root" 
     password = "root" 
    } 

}

BootStrap.groovy中

class BootStrap { 
def bootstrapService 
def grailsApplication 
def init = { servletContext -> 
    switch (Environment.getCurrent().name) { 
     case "dev": 
      bootstrapService.bootstrapDummyData() 
      break; 
     case "test": 
      bootstrapService.bootstrapDummyData() 
      break; 
    } 
} 
def destroy = { 
} 

我想bootstrapService.bootstrapDummyData()當我configrued我的數據源更新模式不被調用。即dbCreate = "update"

+0

能否請您清楚解釋您的問題。 – Visme

+0

我以更新模式配置了DataSource.groovy。當我運行我的Grails應用程序時,它調用BootStrap.groovy,這將導致數據庫中唯一的約束驗證。因爲我已經在我的數據庫中有數據。所以我想當我在更新模式下運行grails-app時,它不會調用BootStrap.groovy。 –

+0

我猜你在你的bootstrap中有一些代碼會創建一些DB實體?請在問題中包含您的'Boostrap.groovy'代碼(請參閱編輯鏈接)。一種方法是檢查實體是否存在(搜索一些唯一的contranstraint),並且只有在實體不存在時才創建實體。 – nickdos

回答

2
class BootStrap { 
def bootstrapService 
def grailsApplication 
def init = { servletContext -> 
if(grailsApplication.config.dataSource.dbCreate == "create-drop"){ 
    switch (Environment.getCurrent().name) { 
     case "dev": 
      bootstrapService.bootstrapDummyData() 
      break; 
     case "test": 
      bootstrapService.bootstrapDummyData() 
      break; 
    } 
    } 
} 
+0

我們可以通過grailsAppliation訪問dataSource的dbCreate屬性。所以如果你不想在你設置你的dbCreate =「update」時調用你的引導代碼, –

0
def init(){ 

    if(User.list().size()==0) 
     objectCreation() 
} 

def objectCreation(){ 

def userObject1 = new User() 
def userObject2 = new User() 


} 

上述代碼例如。如果用戶是在bootstarp中創建的。首先檢查用戶是否已經創建或沒有。如果沒有創建對象。