我在我的应用程序中使用spring批处理。我在步骤级使用弹簧批处理多线程。
以下是我的配置:
<step id="testStep">
<tasklet
task-executor="taskExecutor" throttle-limit="5">
<chunk reader="reader" writer="writer"
commit-interval="10">
</chunk>
</tasklet>
</step>
<bean id="writer" class="org.springframework.batch.item.file.FlatFileItemWriter"
scope="step">
<property name="resource" value="file:${output.file.location.directory}/<<<NEED TO PASS CURRENT EXECUTING THREAD NAME>>>" />
<property name="appendAllowed" value="true"></property>
<property name="lineAggregator" ref="aggregator" />
</bean>
所以在flatfileitemWriter的资源属性中,我需要传递当前正在执行的线程名,这样每个线程都会写入一个单独的唯一文件。
我能够在编写器类中获取当前正在执行的线程名称,但是不知道如何在spring确认文件中获得相同的内容。
有任何想法吗?
答案 0 :(得分:0)
如果您愿意,可以使用spEL;使用此脚本语言,您可以使用标准java方法并检索当前线程名称,语法为#{T(java.lang.Thread).getCurrentThread().getName()}
。
以更清晰的方式使用StepExecutionListener.beforeStep()将当前线程名称注入步执行上下文(例如currentThreadName
键)并以标准方式从步骤xml配置中检索
<property name="resource" value="file:${output.file.location.directory}/#{stepExecutionContext['currentThreadName']}" />