【发布时间】:2020-12-20 06:06:43
【问题描述】:
似乎有很多关于这个主题的问题,但我似乎找不到答案。对不起,如果这是一个骗局!
我有一个包含许多步骤的作业...在某一时刻,我想并行运行多个文件的项目处理(读取/验证/写入)。在使这段代码并行之前,我同步运行它,一切都很好。当我使用任务执行器添加批处理:拆分时,我现在收到错误:
2020-09-01 01:07:12,668 [SimpleAsyncTaskExecutor-1] 错误 AbstractStep - 在作业 ATPRuleCombined 中执行步骤 loadBaseFareInfo 时遇到错误 org.springframework.beans.factory.BeanCreationException:创建名为'scopedTarget.allAddsCleanupProcessorForBaseFareInfo'的bean时出错:范围'job'对于当前线程不活动;如果您打算从单例中引用它,请考虑为该 bean 定义一个作用域代理;嵌套异常是 java.lang.IllegalStateException: No context holder available for job scope
以下是相关代码:
<batch:split id="loadMainTables" next="saveCacheNotification" task-executor="taskExecutor">
<batch:flow>
<batch:step id="loadBaseFareInfo">
<batch:tasklet>
<batch:chunk reader="baseFareInfoGroupReader" processor="baseFareInfoGroupValidator" writer="baseFareInfoGroupWriter"
chunk-completion-policy="baseFareInfoCompletionPolicy">
<!--commit-interval="${baseFareInfo.commitInterval}"> -->
<!-- skip-policy="alwaysSkipPolicy"> -->
<batch:listeners>
<batch:listener ref="errorDataFileItemReadListener"/>
<batch:listener ref="springContextRepo"/>
<batch:listener ref="allAddsCleanupProcessorForBaseFareInfo"/>
<batch:listener ref="baseFareInfo.groupMetricListener"/>
<batch:listener ref="baseFareInfoGroupWriter"/>
<batch:listener ref="baseFareInfoGroupReader"/>
<batch:listener ref="baseFareInfoStepLocking"/>
</batch:listeners>
<batch:streams>
<batch:stream ref="baseFareInfoItemReader"/>
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:flow>
<batch:flow>
<batch:step id="loadNegFareSecurity">
<batch:tasklet>
<batch:chunk reader="negFareSecurityGroupReader" processor="negFareSecurityGroupValidator" writer="negFareSecurityGroupWriter"
chunk-completion-policy="negFareSecurityCompletionPolicy">
<!--commit-interval="${negFareSecurity.commitInterval}"> -->
<!-- skip-policy="alwaysSkipPolicy"> -->
<batch:listeners>
<batch:listener ref="errorDataFileItemReadListener"/>
<batch:listener ref="springContextRepo"/>
<batch:listener ref="allAddsCleanupProcessorForNegFareSecurity"/>
<batch:listener ref="negFareSecurity.groupMetricListener"/>
<batch:listener ref="negFareSecurityGroupWriter"/>
<batch:listener ref="negFareSecurityGroupReader"/>
<batch:listener ref="negFareSecurityStepLocking"/>
</batch:listeners>
<batch:streams>
<batch:stream ref="negFareSecurityItemReader"/>
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:flow>
</batch:split>
<bean id="allAddsCleanupProcessorForBaseFareInfo"
class="com.sabre.aircontent.batch2.rule.basefareinfo.cleanup.AllAddsCleanupProcessorForBaseFareInfo" scope="job">
<property name="headerRepo" ref="headerRepo" />
<property name="allAddsCleanupCursor" ref="hibernateCursorForBaseFareInfoAllAddsCleanup" />
<property name="dao" ref="baseFareInfoDao" />
<property name="cacheNotificationService" ref="cacheNotificationService"/>
<property name="resourceName" value="#{jobParameters['job.resource']}" />
<property name="entityName" value="${baseFareInfo.baseEntityName:#{null}}" />
<property name="expireThresholdInPercent" value="${basefareinfo.allAdds.expireThresholdInPercent}"/>
<property name="metricRepo" ref="baseFareInfo.metricRepo"/>
<property name="jobStartTime"
value="#{jobExplorer.getJobExecution(jobOperator.getExecutions(jobExecution.jobInstance.instanceId)[jobOperator.getExecutions(jobExecution.jobInstance.instanceId).size()-1]).startTime}"/>
<property name="additionalCursorParamValues">
<map>
<entry key="vendor" value="${vendor}" />
</map>
</property>
</bean>
为什么不再识别 allAddsCleanupProcessorForBaseFareInfo bean 的作业范围?他们是解决这个问题的方法吗?
【问题讨论】:
-
请用批处理配置添加整个 XML,而不仅仅是您认为与问题相关的部分。谢谢。
标签: java spring spring-batch