jun*_*sal 6 spring spring-batch
这是我的步骤配置.我的跳过侦听器onSkipInWrite()方法被正确调用.但onSkipInRead()没有被调用.我故意从读者那里抛出空指针异常,从而发现了这一点.
<step id="callService" next="writeUsersAndResources">
<tasklet allow-start-if-complete="true">
<chunk reader="Reader" writer="Writer"
commit-interval="10" skip-limit="10">
<skippable-exception-classes>
<include class="java.lang.Exception" />
</skippable-exception-classes>
</chunk>
<listeners>
<listener ref="skipListener" />
</listeners>
</tasklet>
</step>
Run Code Online (Sandbox Code Playgroud)
我读了一些论坛,并在两个级别上互换了listeners-tag:在chunk内部,在tasklet之外.没有什么工作......
在这里添加我的跳过侦听器
package com.legal.batch.core;
import org.apache.commons.lang.StringEscapeUtils;
import org.springframework.batch.core.SkipListener;
import org.springframework.jdbc.core.JdbcTemplate;
public class SkipListener implements SkipListener<Object, Object> {
@Override
public void onSkipInProcess(Object arg0, Throwable arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSkipInRead(Throwable arg0) {
}
@Override
public void onSkipInWrite(Object arg0, Throwable arg1) {
}
}
Run Code Online (Sandbox Code Playgroud)
专家请建议
tol*_*ius 12
跳过侦听器遵循事务边界,这意味着它们总是在事务提交之前被调用.
由于示例中的提交间隔设置为"10",因此onSkipInRead将在提交这10个项目时立即调用(一次).
因此,如果您尝试逐步调试,则onSkipInRead在ItemReader抛出异常后,您不会立即看到调用.
SkipListener您的示例中的A 有一个空onSkipInRead方法.尝试在里面添加一些日志记录onSkipInRead,移动并重新运行您的作业以查看这些消息.
编辑:
这是一个工作示例[名称更改为'abc']:
<step id="abcStep" xmlns="http://www.springframework.org/schema/batch">
<tasklet>
<chunk writer="abcWriter"
reader="abcReader"
commit-interval="${abc.commit.interval}"
skip-limit="1000" >
<skippable-exception-classes>
<include class="com.abc....persistence.mapping.exception.AbcMappingException"/>
<include class="org.springframework.batch.item.validator.ValidationException"/>
...
<include class="...Exception"/>
</skippable-exception-classes>
<listeners>
<listener ref="abcSkipListener"/>
</listeners>
</chunk>
<listeners>
<listener ref="abcStepListener"/>
<listener ref="afterStepStatsListener"/>
</listeners>
<no-rollback-exception-classes>
<include class="com.abc....persistence.mapping.exception.AbcMappingException"/>
<include class="org.springframework.batch.item.validator.ValidationException"/>
...
<include class="...Exception"/>
</no-rollback-exception-classes>
<transaction-attributes isolation="READ_COMMITTED"
propagation="REQUIRED"/>
</tasklet>
</step>
Run Code Online (Sandbox Code Playgroud)
abcSkipListenerbean 在哪里:
public class AbcSkipListener {
private static final Logger logger = LoggerFactory.getLogger( "abc-skip-listener" );
@OnReadError
public void houstonWeHaveAProblemOnRead( Exception problem ) {
// ...
}
@OnSkipInWrite
public void houstonWeHaveAProblemOnWrite( AbcHolder abcHolder, Throwable problem ) {
// ...
}
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16615 次 |
| 最近记录: |