我是一个域类如下
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>
现在问题是我的数据库具有日期格式17-NOV-14 04.25.06.806000000 AM
的日期格式,但csv文件包含日期格式Mon Nov 17 04:25:06 UTC 2014
。
我找不到任何可以插入ItemWriter的formmatter,虽然我找到了ItemReader的一些参考。
一种方法是通过引入ItemProcesser来解决这个问题,并使用SimpleDateFormatter将日期格式转换为String并写入域ojbect中的新字段,然后引用这些新字段而不是itemWriter中的Date字段。
但是我希望有一个类似于CustomEditor
的更清晰的解决方案,可以在spring xml中应用value-type。有人可以指出这方面或方向的一些资源
答案 0 :(得分:3)
您正在寻找的“格式化程序”是LineAggregator
。目前,您正在使用DelimitedLineAggregator
,它在解决数据分隔方面时,不会解决格式问题。看看FormatterLineAggregator
。它允许您通过指定字符串格式(使用String
)来格式化LineAggregator
生成的输出String.format()
。从那里你应该能够指定你想要渲染日期的格式。