gpt4 book ai didi

java - Spring 批处理 : Write lines after valid header

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:04 24 4
gpt4 key购买 nike

我有一个非常大的 txt 文件,我正在使用 PatternMatchingCompositeLineMapper 解析该文件,因为每行都有不同的列数。
在这个文件中,我有来自多个时期的数据,该文件中的每个时期都由标题 DATA 和该时期的日期表示。在此 header 之后是包含与此期间相关的数据的行,它们以 header STOP 结尾。
问题是我需要将特定日期之前开始和之后结束的所有期间的数据保存到另一个文件中。
有什么方法可以在 Spring Batch 中执行此操作吗?
示例文件如下所示:

DATA|20121113-20121212
STRT|33|20121213|123425654|123
ASD|asd|asd|asd
QWE|qwe|qwe
ZXC|zxc|zxc|zxc|zxc
STOP

DATA|20121213-20130112
STRT|33|20130113|65465463546|123
ASD|asd|asd|asd
QWE|qwe|qwe
ZXC|zxc|zxc|zxc|zxc
STOP

DATA|20121113-20121212
STRT|33|20121213|34653465546|123.10
ASD|asd|asd|asd
QWE|qwe|qwe
ZXC|zxc|zxc|zxc|zxc
STOP

DATA|20120713-20120812
STRT|33|20121213|34654356546|123.10
STOP

DATA|20121213-20130112
STRT|33|20130113|345646345|123.10
ASD|asd|asd|asd
QWE|qwe|qwe
ZXC|zxc|zxc|zxc|zxc
STOP

最佳答案

您可以通过ClassifierCompositeItemWriter来做到这一点。我假设您有一个域对象(例如 MyDomainObject),它具有相同输入中所示的开始日期和结束日期。

您首先需要创建一个声明 classify 方法的类,并用 @Classifier 对其进行注释。 。这将有效地将项目路由到底层项目作者之一(在您的情况下,基于记录的开始日期和结束日期是否跨越引用日期)。

import org.springframework.batch.support.annotation.Classifier;
public class MyDateClassifierDelegate {
//set this via Spring, or whatever
private final Date referenceDate;

@Classifier
public String classify(MyDomainObject classifiable) {
if(classifiable.startDate.compareTo(referenceDate) < 0
&& classifiable.endDate.compareTo(referenceDate) >= 0) {
return "FILE1";
}
else {
return "FILE2";
}
}
}

接下来,您需要配置 ClassifierCompositeItemWriter 以根据分类器设置的值委托(delegate)给两个基础项编写器之一。在这种情况下,您将根据需要设置 file1Writerfile2Writer,我认为它们只是平面文件项编写器。

<beans:bean id="dateRangeBasedFileWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<beans:property name="classifier">
<beans:bean class="org.springframework.batch.classify.BackToBackPatternClassifier">
<beans:property name="routerDelegate">
<!-- this is where you specify the classifier that is to be used -->
<beans:bean class="MyDateClassifierDelegate" />
</beans:property>
<beans:property name="matcherMap">
<beans:map>
<!-- this will contain your "spanning reference date" items -->
<beans:entry key="FILE1" value-ref="file1Writer" />
<!-- this will contain your "not spanning reference date" items -->
<beans:entry key="FILE2" value-ref="file2Writer" />
</beans:map>
</beans:property>
</beans:bean>
</beans:property>
</beans:bean>

关于java - Spring 批处理 : Write lines after valid header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com