spring - 使用任何字段分隔符处理文本文件
问题描述
我需要在春季批处理中处理文件,并且文件分隔符可以更改。例如在第一个文件中,文件字段分隔符是逗号。并且当接收到具有文件字段分隔符选项卡的第二个文件时。如何在春季批处理中处理这种类型的文件?
解决方案
LineMapper
您可以为每个步骤执行的Reader
步骤级别范围定义 bean 。
LineMapper Bean
@Bean("lineMapper")
@StepScope
public LineMapper<YourCustomRecordVo> lineMapper() {
DefaultLineMapper<YourCustomRecordVo> lineMapper = new DefaultLineMapper<YourCustomRecordVo>();
DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer("yourDelimiter");
lineMapper.setLineTokenizer(lineTokenizer);
//set fieldset mappers etc
return lineMapper;
}
读者豆
@Bean(name = "reader")
@StepScope
public YourCustomReader reader(){
YourCustomReader reader = new YourCustomReader();
reader.setLineMapper(lineMapper());
//set others necessary properties
return reader;
}
在这里,将为每个步骤(即每个文件处理)创建两个reader
& bean。lineMapper
所以你可以根据不同的条件设置不同的分隔符。
更新
为了使用您的自定义分隔符,您可以将其设置为作业属性,例如
JobParametersBuilder paramsBuilder = new JobParametersBuilder();
paramsBuilder.addString("delimiter", "yourCustomDelimiter");
和午餐工作一样
jobLauncher.run(job, paramsBuilder.toJobParameters());
最后检索该作业参数(当前情况下的分隔符)为
@Bean("lineMapper")
@StepScope
public LineMapper<YourCustomRecordVo> lineMapper(@Value("#{jobParameters['delimiter']}") String delimiter) {...}
推荐阅读
- java - 用于进行更改的 Java 程序
- lua - 如何从 WoW 插件中的框架调用匿名函数?
- ide - 在 PhpStorm 中添加多个游标的重映射键
- vba - VBA 网页抓取:Internet Explorer 和 XMLHTTP 请求之间的区别
- ionic-framework - 如何从 Ionic 5 中的推送通知中打开应用程序 + 特定 URL?
- web-applications - 将我的客户根 CA 证书存储在我的应用程序的浏览器会话存储中是否可行?
- javascript - 有没有办法在 Vuejs 路由器中传递变量?
- javascript - .env 文件中的 mapbox accessToken
- algorithm - 没有平均 (theta) 界限的时间函数示例
- reactjs - 从 Google Cloud Storage 提供 React 应用程序