spring-batch实践篇

上篇《spring-batch预研篇》有谈到大批量在线处理类job的需求场景时,有预研spring-batch,那本文主要是从实践上分享一些在遇到的坑。

1.    启动问题(默认总是自动启动)?要设置spring.batch.job.enabled=false

 

2.  Job parameter在spring-boot中传参问题?由于spring-batch的prameter采用了后绑定技术,scope属性为step就是在生成Step的时候,才去创建bean,因为这个时候jobparameter才传过来。

 

3.  @StepScope创建ItemWriter时总是报org.springframework.batch.item.WriterNotOpenException: Writer must be open before it can be written to?  网上也有此[问题](https://stackoverflow.com/questions/23847661/spring-batch-org-springframework-batch-item-readernotopenexception-reader-must),但未解决,个人感觉这个可能是个bug,为毛去掉就好了(后绑定特性不好使)

 

4.  @MapperScan可以扫描任何类型到容器? 要指定明确的包路径,mybatis的@MapperScan主要是代替@Mapper,不然每个mapper类上都要加@Mapper显得十分的繁琐

 

5.    @Step设置taskExecutor来并行方式执行总是警告ItemStream was opened in a different thread?不知道有没有问题,先取消了

 

6.    RetryListener拦截器中的open,close操作总是执行?它操作Chunk的process、writer即使不发生重试异常也会执行,我们中的关注onError操作

 

7.    异常处理方面,batch中尽可能不要处理(catch)任何异常,最好全部抛出让框架来控制。但skip(Exception.class)设置这样级别尽可能禁止,会导致所有异常信息都会忽略(也不显示任何错误信息),最终执行结果也是成功的(其实不然),这个问题也折磨到我无语

 

8.    SkipListener跳过拦截器在reader、processor、writer都会立即被触发?不全然如此,参考MulticasterBatchListener它实现了6个接口组合策略的拦截,由于每一批的处理被隐式的分支在同一个事务中,写阶段其中一条出错导致整个作业失败不能接受的,因此立即触发不准确

 

9.  springboot为毛不能使用JobExecutionDecider啊?特别是作业流(stpe flow)支持不好,一旦报错,网上根本都找不到解决方案。

 

10. 谈谈FlatFileItemReader拓展?很多地方都需要表头(第一行数据)做转换映射对应的字段后读取数据源:读表头setLinesToSkip必须设置(0),可以读出但好像后续没法处理(只能重写FlatFileItemReader.doRead来跳出并读下一行,这样拓展更复杂);不读表头设置为1,通过getNames折中处理处理吧,整体感觉没法拓展可言

 

11. 框架报Data truncation: Data too long for column 'STRING_VAL'?修改为STRING_VAL varchar(2500)

 

12. org.apache.poi.openxml4j.exceptions.InvalidFormatException: Your InputStream was neither an OLE2 stream, nor an OOXML stream?使用poi确保使用excel文件格式

 

13.前面也有提到过基于mybatis多数据源方面的需求,分享见我的github

你可能感兴趣的:(spring源码)