2014-04-04 31 views
2

我使用Spring Batch的一個Grails項目,我安裝了一個Grails的插件來得到它的工作:Grails的彈簧批如何在grails項目的spring批處理作業中配置監聽器?

我implemtented一個簡單的工作,有一個讀者,一個處理器和一個作家,它的工作原理精細。

但我想添加聽衆到我的工作步驟(閱讀器,處理器和作家),以便很好地處理錯誤。

但我不能讓我的聽衆使用!我想我可能會誤用用於定義bean的dsl。通過對dsl的不同嘗試,我有時會在運行時發生錯誤,或者有時沒有錯誤,但是不會使用偵聽器。

你知道grails-spring-batch插件目前是否允許定義監聽器嗎?如果是,它是如何工作的?

這裏是我的春天批次的conf,它使用Grails的插件提供的DSL:

batch.job(id: 'simpleJob') { 
    batch.step(id: 'myStep') { 
     batch.tasklet{ 
      batch.chunk(
        reader: 'myReader', 
        processor: 'myProcessor', 
        writer: 'myWriter', 
        'commit-interval': 1, 
        listeners: 
          batch.listener(
            ref: "myReaderListener" 
          ) 

      ) 
     } 
    } 
} 

編輯:一個簡單的解決方案,我也沒多想:讓我的讀者實現ItemReadListener,帶來的onError方法,這正是我想要做的。

但是如果需要將監聽邏輯放入另一個bean中,我的問題依然存在。

+1

不應該在塊外部但是在tasklet內部定義偵聽器嗎? –

回答

1

正如在評論中指出的那樣,應該在tasklet上配置聽衆。它也應該在listeners區塊中。試試這個:

batch.job(id: 'simpleJob') { 
    batch.step(id: 'myStep') { 
     batch.tasklet { 
      batch.chunk(
       reader: 'myReader', 
       processor: 'myProcessor', 
       writer: 'myWriter', 
       'commit-interval': 1) 
      batch.listeners { 
       batch.listener(ref: 'myReaderListener') 
      } 
     } 
    } 
} 
相關問題