Java 如何在Itemwriter中格式化输出日期?
我有一个域类,如下所示Java 如何在Itemwriter中格式化输出日期?,java,spring,date,spring-batch,Java,Spring,Date,Spring Batch,我有一个域类,如下所示 class SubScritpion{ private String subScripId; private String useId; private Date subScripDate; private Date billStartDate; private Date billEndDate; private int amount; //getters and Setters } 我从数据库中读取数据,数据类型为数据库中的时间戳,并将其转换为j
class SubScritpion{
private String subScripId;
private String useId;
private Date subScripDate;
private Date billStartDate;
private Date billEndDate;
private int amount;
//getters and Setters
}
我从数据库中读取数据,数据类型为数据库中的时间戳,并将其转换为java.util.Date,然后使用flatefileItemwriter
写入csv文件,我的ItemWriter如下所示
<bean id="kpCvsFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"
scope="step">
<!-- write to this csv file -->
<property name="resource" value="file:/#{jobParameters['abs.file.path']}" />
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<property name="delimiter" value="," />
<property name="fieldExtractor">
<bean
class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<property name="names"
value="subScripId,useId,subScripDate,billStartDate,billEndDate,amount" />
</bean>
</property>
</bean>
</property>
<property name="headerCallback" ref="kpFileHeader" />
</bean>
现在的问题是日期格式我的数据库的日期格式为2014年11月17日04.25.06.806000000 AM,但csv文件包含的日期格式为2014年11月17日04:25:06 UTC周一
我没有找到任何可以插入ItemWriter的formmatter,尽管我找到了一些ItemReader的参考资料
一种方法是通过引入ItemProcesser来解决此问题,并使用SimpleDataFormatter将日期格式转换为字符串,然后使用写入域ojbect中的新字段,然后引用此新字段而不是itemWriter中的日期字段。
但我希望有一个更干净的解决方案,类似于
CustomEditor
,可以在SpringXML中应用值类型。有人能指出这方面的一些资源或方向吗您正在寻找的“格式化程序”是线性聚合器
。当前您正在使用分隔线聚合器
,它在处理数据的分隔部分时,不处理格式。查看FormatterLineAggregator
。通过指定字符串格式(使用String.format()。从那里,您应该能够指定要呈现日期的格式。这不能解决我的问题FormatterLineagCreator不能解决问题。我已经创建了如下格式化程序:%1$td-%1$Tb-%1$ty%1$tI.%1$tM.%1$tS.%1$tN%1$Tp,%2$d。但是,由于fieldextractor传递的是empty而不是null,因此%2$d失败。将数据提取到一行中有两个阶段。第一个是通过字段提取器
从项目中提取字段。如果需要空字符串而不是空字符串,请创建自定义FieldExtractor
实现。第二阶段是将这些字段格式化为所需的输出。您的问题是关于第二阶段,如果您提供第一阶段的正确数据,FormatterLineAgggerator
可以在该阶段工作。非常感谢您的输入!1我在考虑定制FieldTractor。但是,由于您是SB的PL,我想问您一个问题,您不认为应该有专门的方法来处理格式化,尤其是日期(java对日期有太多的混乱,现在又是使用java 8的新日期api)?尽管我更喜欢使用SimpleDataFormat,但没有什么可以阻止您创建自己的LineAggregator
,并将自己的格式逻辑放入其中。我想我们可以添加一种按类型注册自定义变压器的方法,但对于这么简单的事情来说,这可能有点复杂…@Michael Minella-你能分享一下代码片段吗?由于您是Spring批处理的发起者,所以我们总是希望看到代码片段。请做必要的事。你能给我引路吗?