ItemProcessor中的ResourceAware实现将资源返回为Null

时间:2015-07-03 11:23:38

标签: spring spring-batch batch-processing

我知道我问的问题可能会在这里问过。但即使在提到这些答案之后我的问题还没有解决。所以我再次发布它

我需要读取ItemProcessor中当前正在处理的资源的名称。为此,我尝试使用 ResourceAware 标记接口,它具有我们需要实现的setResource方法。根据我的阅读,如果我们使用MultiResourceItemReader,则应调用ResourceAware的setResourceMethod,这样我们就可以获得对当前处理项目的引用。但出于某种原因,这种情况并没有发生。请找到我的以下配置

<step id="readChatLogsData">
<tasklet>
    <chunk reader="multiResourceReader" processor="chatProcessor" writer="mongodbItemWriter" commit-interval="100">
    </chunk>
</tasklet>
</step>

<beans:bean id="multiResourceReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
    <beans:property name="resources" value="file:*.log" />
    <beans:property name="delegate" ref="chatReader" />
</beans:bean>


<beans:bean id="chatReader" class="org.springframework.batch.item.file.FlatFileItemReader">
    <beans:property name="lineMapper" ref="tickerLineMapper" />
</beans:bean>
<beans:bean id="tickerLineMapper"
    class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
    <beans:property name="fieldSetMapper" ref="chatMapper" />
    <beans:property name="lineTokenizer" ref="tickerLineTokenizer" />
</beans:bean>
<beans:bean id="tickerLineTokenizer"
    class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
    <beans:property name="delimiter" value="^A" />
    <beans:property name="names" value="A,B,C" />
</beans:bean>

public class ChatProcessor  implements ItemProcessor<SingleChatFileInput,String>, ResourceAware

如果我在这里做错了或者我错过了任何事情,请告诉我。 如果有任何其他方法可以实现这一点,请建议。

1 个答案:

答案 0 :(得分:1)

  

标记界面,指示项目应具有Spring   读取它的资源,设置在它上面。

ResourceAware接口应该由chatReader(我认为是SingleChatFileInput)而不是ItemProcessor返回的对象实现。