ItemProcessor returns 资源中的 ResourceAware 实现为 Null
ResourceAware Implementation in ItemProcessor returns resource as Null
我知道我问的问题在这里已经被问过很多次了。但即使在参考了这些答案之后,我的问题还没有 solved.So 我再次发布
我需要读取 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
如果我在这里做错了什么或者我遗漏了什么,请告诉我。
也请提出是否有任何其他方法可以实现此目的。
Marker interface indicating that an item should have the Spring
Resource in which it was read from, set on it.
ResourceAware
接口应该由 chatReader
返回的对象实现(我认为 SingleChatFileInput
),而不是 ItemProcessor
.
我知道我问的问题在这里已经被问过很多次了。但即使在参考了这些答案之后,我的问题还没有 solved.So 我再次发布
我需要读取 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
如果我在这里做错了什么或者我遗漏了什么,请告诉我。 也请提出是否有任何其他方法可以实现此目的。
Marker interface indicating that an item should have the Spring Resource in which it was read from, set on it.
ResourceAware
接口应该由 chatReader
返回的对象实现(我认为 SingleChatFileInput
),而不是 ItemProcessor
.