1
<beans>
<batch:job id="job1" restartable="false">
  <batch:step id="step1" next="step2">
    <batch:tasklet>
      <batch:chunk reader="readerA" writer="writerA" commit-interval="1" />
    </batch:tasklet>
  </batch:step>
  <batch:step id="step2">
    <batch:tasklet ref="tasklet1"/>
  </batch:step>
  <batch:listeners>
    <batch:listener ref="listenerA" />
  </batch:listeners>
</batch:job>

<bean id="listenerA" class="com.example.ListenerA" scope="step">
  <property name="archiveDate" value="#{jobParameters['jobRunDate']}" />
</bean>
</beans>

为什么上面给我以下错误:

java.lang.IllegalStateException: No context available while replacing placeholders.

解决此问题的最佳方法是什么?

4

1 回答 1

3

我相信问题在于你想要一个步进监听器,而不是一个工作监听器。step 范围超出了您定义侦听器的范围,因此范围 step 不可用 - 如果它是作业侦听器,则不需要占位符,因为您可以从当前 JobExecution 获取变量。

如果您改为像这样更改配置(假设这是一个步骤侦听器而不是作业侦听器):

<batch:step id="step1" next="step2">
<batch:tasklet>
  <batch:chunk reader="readerA" writer="writerA" commit-interval="1" />
  <batch:listeners>
      <batch:listener ref="listenerA" />
 </batch:listeners>
</batch:tasklet>
</batch:step>

我相信这将为您提供“step1”步骤的正确步骤侦听器 - 如果您想要第二步的侦听器,则类似的配置。

于 2011-03-23T19:02:23.387 回答