这是我的工作配置:
<batch:job id="clientesJob" job-repository="jobRepository">
<batch:step id="step1" next="renameFiles">
<tasklet>
<chunk reader="multiResourceReader" writer="sqlWriter"
commit-interval="1" />
</tasklet>
</batch:step>
<batch:step id="renameFiles">
<tasklet ref="fileRenamingTasklet" />
</batch:step>
</batch:job>
<bean id="multiResourceReader"
class=" org.springframework.batch.item.file.MultiResourceItemReader">
<property name="resources" value="file:c:/cvs/basecli*" />
<property name="delegate" ref="flatFileItemReader" />
</bean>
<bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="fieldSetMapper" ref="clienteMapper" />
<property name="lineTokenizer" ref="tickerLineTokenizer" />
</bean>
</property>
</bean>
<bean name="tickerLineTokenizer"
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer" />
<bean id="clienteMapper" class="com.bind.mapper.ClienteFieldSetMapper">
</bean>
<bean id="fileRenamingTasklet" class="com.bind.tasklet.FileRenamingTasklet">
<property name="directory" value="file:c:/cvs/" />
</bean>
在第一步中,我正在使用MultiResourceItemReader读取文件夹,然后将其写入SQL Server。 第二个重命名文件,如“PROCESSFILE- {originalname}”。
我要归档的事情是在第一步中出现问题,以“PROCESSERROR- {originalname}”之类的不同方式重命名文件。 所以我必须知道FileRenamingTasklet中第一步的状态。
我读过有关将数据设置为stepExecutionContext的内容。但我无法访问ClienteFieldSetMapper。 我也尝试使用监听器,但在那里我无法传递数据。
为了进一步考虑,我需要文件名和状态。
有什么想法吗?
答案 0 :(得分:1)
让fileRenamingTasklet
成为StepExecutionListener
并听取step1
afterStep
结果;在StepExecutionListener.afterStep(StepExecution stepExecution)
检查stepExecution.getExitStatus()
,您就可以正确重命名文件了。
要添加侦听器,您必须将xml修改为:
<batch:step id="step1" next="renameFiles">
<tasklet>
<chunk reader="multiResourceReader" writer="sqlWriter" commit-interval="1" />
</tasklet>
<listeners>
<listener ref="fileRenamingTasklet" />
</listeners>
</batch:step>