如何格式化Itemwriter中的输出日期?

时间:2014-11-18 11:23:33

标签: 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
}

我从数据库中读取这些数据,数据类型为数据库中的时间戳,并将其转换为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。有人可以指出这方面或方向的一些资源

1 个答案:

答案 0 :(得分:3)

您正在寻找的“格式化程序”是LineAggregator。目前,您正在使用DelimitedLineAggregator,它在解决数据分隔方面时,不会解决格式问题。看看FormatterLineAggregator。它允许您通过指定字符串格式(使用String)来格式化LineAggregator生成的输出String.format()。从那里你应该能够指定你想要渲染日期的格式。