如何在grails项目中的spring批处理作业中配置侦听器?
我在grails项目中使用springbatch,并安装了一个grails插件使其工作:grailspringbatch 我实现了一个简单的工作,有一个读卡器、一个处理器和一个写卡器,它工作得很好 但是我想在我的工作步骤中添加侦听器(reader、processor和writer),以便很好地处理错误 但我不能让我的听众被利用!我想我可能误用了用于定义bean的dsl。在dsl上进行不同的尝试时,我有时会在运行时出错,有时不会出错,但侦听器没有被使用 您知道grails spring批处理插件当前是否允许定义侦听器吗?如果是,它是如何工作的 下面是我的spring批处理配置,它使用grails插件提供的DSL:如何在grails项目中的spring批处理作业中配置侦听器?,grails,groovy,spring-batch,Grails,Groovy,Spring Batch,我在grails项目中使用springbatch,并安装了一个grails插件使其工作:grailspringbatch 我实现了一个简单的工作,有一个读卡器、一个处理器和一个写卡器,它工作得很好 但是我想在我的工作步骤中添加侦听器(reader、processor和writer),以便很好地处理错误 但我不能让我的听众被利用!我想我可能误用了用于定义bean的dsl。在dsl上进行不同的尝试时,我有时会在运行时出错,有时不会出错,但侦听器没有被使用 您知道grails spring批处理插件当
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"
)
)
}
}
}
编辑:一个我没有想到的简单解决方案:让我的读者实现itemreadstener,,这带来了onError方法,这正是我试图做的
但是,如果需要将侦听器逻辑放在另一个bean中,我的问题仍然存在。如注释中所述,应该在
tasklet上配置侦听器。它还应该位于侦听器
块中。试试这个:
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')
}
}
}
}
监听器不应该在区块外部定义,而应该在tasklet内部定义吗?