Spring批处理多个文件编写器的唯一名称

时间:2014-07-06 14:36:20

标签: java multithreading spring spring-mvc spring-batch

我在我的应用程序中使用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确认文件中获得相同的内容。

有任何想法吗?

1 个答案:

答案 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']}" />