【问题标题】:How to configure listeners in a spring batch job in a grails project?如何在 grails 项目的 spring 批处理作业中配置侦听器?
【发布时间】:2014-05-16 17:58:42
【问题描述】:

我在一个 grails 项目中使用 spring batch,我安装了一个 grails 插件来让它工作:grails-spring-batch

我实现了一个简单的工作,有一个读取器、一个处理器和一个写入器,它工作正常。

但我想在我的工作步骤(读取器、处理器和写入器)中添加侦听器,以便很好地处理错误。

但我无法让我的听众被使用!我想我可能滥用了用于定义 bean 的 dsl。通过对 dsl 的不同尝试,我有时会在运行时出错,或者有时没有错误但未使用侦听器。

你知道 grails-spring-batch 插件当前是否允许定义监听器?如果是,它是如何工作的?

这是我的 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 中,我的问题仍然存在。

【问题讨论】:

  • 监听器不应该在块外定义在tasklet内吗?

标签: grails groovy spring-batch


【解决方案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')
             }
         }
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多