如何在grails项目中的spring批处理作业中配置侦听器?

如何在grails项目中的spring批处理作业中配置侦听器?,grails,groovy,spring-batch,Grails,Groovy,Spring Batch,我在grails项目中使用springbatch,并安装了一个grails插件使其工作:grailspringbatch 我实现了一个简单的工作,有一个读卡器、一个处理器和一个写卡器,它工作得很好 但是我想在我的工作步骤中添加侦听器(reader、processor和writer),以便很好地处理错误 但我不能让我的听众被利用!我想我可能误用了用于定义bean的dsl。在dsl上进行不同的尝试时,我有时会在运行时出错,有时不会出错,但侦听器没有被使用 您知道grails spring批处理插件当

我在grails项目中使用springbatch,并安装了一个grails插件使其工作:grailspringbatch

我实现了一个简单的工作,有一个读卡器、一个处理器和一个写卡器,它工作得很好

但是我想在我的工作步骤中添加侦听器(reader、processor和writer),以便很好地处理错误

但我不能让我的听众被利用!我想我可能误用了用于定义bean的dsl。在dsl上进行不同的尝试时,我有时会在运行时出错,有时不会出错,但侦听器没有被使用

您知道grails spring批处理插件当前是否允许定义侦听器吗?如果是,它是如何工作的

下面是我的spring批处理配置,它使用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"
                            )

            )
        }
    }
}
编辑:一个我没有想到的简单解决方案:让我的读者实现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内部定义吗?