我正在写入CSV文件并使用FlatFileItemWriter
来执行此操作。我有一个bean作为我的类,我也有资源的属性,我提供用于写出项目的文件名。
是否可以将日期和时间附加到文件名?
现在我告诉它写出一个名为report.csv的文件,而不是我希望它写出一个名为report-7-2-2014-16-03.csv的文件
这里是作家的XML配置
<bean id="csvWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource">
<bean class="org.springframework.core.io.FileSystemResource">
<constructor-arg value="${REPORT_FILENAME}" />
</bean>
</property>
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean class="com.example.CSVLineAggregator" />
</property>
<property name="headerCallback">
<bean class="com.example.CSVHeaderWriter" >
<constructor-arg value="${REPORT_HEADER}" />
</bean>
</property>
</bean>
答案 0 :(得分:4)
您需要configure your step进行后期绑定才能解决问题 延迟绑定允许您使用存储在jobParameters和作业或步骤执行上下文中的值,在作业/步骤执行期间评估表达式,而不是以静态方式(在xml pasring期间,要清除)评估表达式;这个上下文仅在作业/步骤执行期间可用! 要启用此功能:
step="scope"
#{jobParameters['REPORT_FILENAME']}
表达式的spEL让SB从作业参数中提取报告名称<bean id="csvWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
<property name="resource" value="file://report-dir/#{jobParameters['REPORT_FILENAME']}" />
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean class="com.example.CSVLineAggregator" />
</property>
<property name="headerCallback">
<bean class="com.example.CSVHeaderWriter" >
<constructor-arg value="${REPORT_HEADER}" />
</bean>
</property>
</bean>
这只是一个小例子,但您可以阅读有关Late binding
的更多信息