![](/img/trans.png)
[英]How to set up a one-off job trigger at a specified time using Grails Quartz2 plugin
[英]one-off grails script for populating database
更新:從Grails 1.3.6開始,可以從Gant腳本訪問完整域。 從Grails 1.3.6發行說明 :
您現在可以使用run-script命令從命令行運行一個或多個Groovy腳本,例如
grails run-script [path-to-script-1] [path-to-script-2] ... [path-to-script-n]
這解決了Gant腳本中無法方便地訪問應用程序類的問題,因為腳本啟動時它們在類路徑中不可用。
大家好,
我是新手使用Grails(在一個真實的項目中),我有一個我需要執行的一次性腳本,它讀取一個文件,然后填充我的數據庫。
我希望腳本在我的grails應用程序的上下文中運行,所以我使用了create-script命令。 我現在明白這使它成為一個'Gant'腳本。 這樣做的原因是我認為它可以讓我輕松訪問所有grails域的優點,這樣我就可以輕松地做到這樣的事情:
Car car = new Car(model: 'bar', brand: 'Ford')
car.save()
在這里,Car是我的一個域類,我從文件中檢索到了字符串'bar'和'Ford'。
我的腳本的開頭看起來像這樣:
import com.foo.Car
grailsHome = Ant.project.properties."environment.GRAILS_HOME"
includeTargets << new File ( "${grailsHome}/scripts/Bootstrap.groovy" )
target(main: "a script for storing cars") {
depends(bootstrap, classpath) // code dealing with the file with cars follows
令人驚訝的是,當我用命令grails LoadCars
執行腳本時,groovy給了我一個java.lang.NoClassDefFoundError: com.foo.Car
grails LoadCars
我采取了錯誤的方法,還是有一些更簡單的我做錯了?
任何幫助表示贊賞
我知道這些腳本是有用的,我甚至可能會收到討厭的郵件甚至建議它,但我過去只是將這類東西直接加入到我的應用程序中。
我在配置中設置了一個標志,指示數據是否應該被引導,如果是這樣,引導代碼在啟動時查找逗號分隔文件並調用服務方法來加載數據。
我已經更新了grails run-script Gant腳本 (上面提到的Jared)來處理grails 1.3.5。 我一直想做這件事,但這個問題讓我最終開始討論它。
只需下載帖子中描述的腳本,將其保存在grails“scripts”目錄中,然后您可以運行自己的groovy腳本來引導數據:
grails run-script script-path/boostrapMyDataIntoApp.groovy
我必須這樣做,你必須創建一個特殊的腳本,允許你從標准的grails腳本訪問GORM。 有關詳細信息,請參閱此問題 。 我不確定腳本的當前狀態是在grails 1.3下,但是腳本的作者在評論中發布了。
漢斯,這里有幾個選擇,假設你沒有出去打磨GANT腳本印章8 ^)
所以假設你正在做一些集成模式的TDD,對嗎? 你有沒有看過db-stuff插件? 實際上,人們利用名為dbUnit的開源軟件包(JUnit項目的擴展),這對Java和Groovy項目來說也是一個很好的選擇。
* db-stuff <0.3.0> - db模式管理和數據導入/導出。 生成通用模式文件,並將基礎/種子/測試數據導入或導出到數據庫中。
我傳統上也在BootStrap中根據環境做到這一點 - 我試圖永遠不要讓這些域假設/約束太過不同步。 用我的架構。
這是我正在談論的經典:
class BootStrap {
def init = { servletContext ->
if (GrailsUtil.environment.equals( GrailsApplication.ENV_DEVELOPMENT )) {
log.info( "Loading sample data for 2010 models..." );
new Car( manufacturer: new Manufacturer( name: "Toyota" ), model: "Prius" )
new Car( manufacturer: new Manufacturer( name: "GM" ), model: "Volt" )
//...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.