我正在从文件夹中读取多个文件。假设文件名为test1.txt、test2.txt、test3.txt。我希望将这些文件名传递给writer和生成的输出文件名,如'test1.xml''test2.xml''test3.xml。
感谢你在这方面的帮助。
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Value("classpath*:test*.txt")
private Resource[] inputFiles;
@Value("${fluent.ttrade.Location.Outbound}")
private String outPutLocation;
@Bean
public MultiResourceItemWriter<DeliveryOrder> multiResourceBlkdItemWriter() throws Exception {
MultiResourceItemWriter<DeliveryOrder> multiWriter = new MultiResourceItemWriter<DeliveryOrder>();
multiWriter.setDelegate(blkdItemWriter());
String customerOutputPath = outPutLocation + "test1.xml";
System.out.println(">> Output Path: " + customerOutputPath);
multiWriter.setResource(new FileSystemResource(customerOutputPath));
return multiWriter;
}
@Bean
public MultiResourceItemReader<trade> multiResourceBlkdItemReader() {
MultiResourceItemReader<trade> reader = new MultiResourceItemReader<trade>();
reader.setDelegate(blkdItemReader());
reader.setResources(inputFiles);
return reader;
}
@Bean
public FlatFileItemReader<trade> blkdItemReader() {
FlatFileItemReader<trade> reader = new FlatFileItemReader<>();
DefaultLineMapper<trade> customerLineMapper = new DefaultLineMapper<>();
FixedLengthTokenizer tokenizer = new FixedLengthTokenizer();
tokenizer.setNames(new String[] { "recordType"});
tokenizer.setColumns(new Range[] { });
customerLineMapper.setLineTokenizer(tokenizer);
customerLineMapper.setFieldSetMapper(new MYFieldSetMapper());
customerLineMapper.afterPropertiesSet();
reader.setLineMapper(customerLineMapper);
return reader;
}
@SuppressWarnings("deprecation")
@Bean
public CustomStaxEventItemWriter<order> blkdItemWriter() throws Exception {
//some code here
itemWriter.setHeaders(listHeaders);
itemWriter.setMarshaller(marshaller);
itemWriter.setRootTagName("blkdFile");
itemWriter.setFooterCallback(blkdFooterCallBack());
itemWriter.afterPropertiesSet();
return itemWriter;
}
@Bean
public BlkdFooterCallBack blkdFooterCallBack() {
BlkdFooterCallBack callback = new BlkdFooterCallBack();
return callback;
}
@Bean
public BlkdItemProcessor blkdItemProcessor() {
return new BlkdItemProcessor();
}
@Bean
public JobExecutionListener listener() {
return new EtradeResultJobListener();
}
@Bean
public Step step1() throws Exception {
return stepBuilderFactory.get("step1")
.<trade, order> chunk(2000)
.reader(multiResourceBlkdItemReader())
.processor(blkdItemProcessor())
.writer(multiResourceBlkdItemWriter())
.listener(blkdFooterCallBack())
.build();
}
@Bean
public Job job() throws Exception {
return jobBuilderFactory.get("job")
.start(step1())
.listener(listener())
.build();
}
Spring Batch有一个叫做ResourceAware
的接口。在其中,当使用MultiResourceItemReader
时,如果返回的项实现了该接口,我们将注入该项所来自的资源。这使您能够获得所需的关于该项来自哪个文件的所有信息。您可以在javadoc中阅读更多关于该接口的信息:https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/resourceaware.html
我有从多个文件读取并写入多个文件的Spring批处理配置。是否可以只写入从多个读取的一个文件。假设我收到巨大的XML文件,我将XML拆分为小文件并使用分区器并行读取小文件。但我需要将从不同的小xml文件读取的所有数据写入一个输出文件。Spring批处理是否可以做到这一点?我知道通过使写入器同步是可能的,但我正在寻找任何其他可能的方式作业配置 我得到错误组织。springframework。一批项目
我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。
问题内容: 我正在尝试运行一个应用程序(例如),因此它将从文件中读取stdin并从stdout写入另一个文件。 目前我有 它可以按预期工作,因为我可以对该文件进行某些操作,并且top可以接收它。但是我无法重定向top的输出。我该如何实现? 编辑: 好吧,让我们从头开始。我正在测试: 问题答案: 让我们忘掉这似乎是一条红色的鲱鱼。 要将stdin或stdout映射到文件,可以使用重定向: 甚至:
问题内容: 我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。 但是,我发现有时我无法读取文件的整行。 例如,tomcat正在尝试编写以下内容(仅作为示例): 192.168.0.0本地主机/index.html .
问题内容: 我在JAR文件中有一个文件。这,例如。 我该如何访问?我的源代码是: 问题答案: 您不能使用File,因为此文件在文件系统上并不独立存在。相反,您需要getResourceAsStream(),如下所示: