2017-11-27 21 views
1

バッチジョブを処理するためにSpringバッチを利用しようとしています。 私はexecutionIdを使用してstopに実行中のジョブをしようとすると、ジョブがSpringブートJobOperator.stop(executionId)とJobOperator.restart(executionId)の動作

104「」、「3」、「104」SpringBatchDb.BATCH_JOB_EXECUTIONテーブルにエントリの下で停止され、「2017年11月27日11:39: 10 '、' 2017-11-27 11:39:10 '、' 2017-11-27 11:39:48 '、' STOPPED '、' STOPPED '、' org.springframework.batch.core.JobInterruptedException '、' 2017年11月27日11:39:48' 、STATUSEXIT_CODESTOPPEDのように更新されていることをNULL

注意。しかし、例外として、org.springframework.batch.core.launch.NoSuchJobException: No job configuration with the name [testJob] was registered at org.springframework.batch.core.configuration.support.MapJobRegistry.getJob(MapJobRegistry.java:66) at org.springframework.batch.core.launch.support.SimpleJobOperator.restart(SimpleJobOperator.java:275) at org.springframework.batch.core.launch.support.SimpleJobOperator$$FastClassBySpringCGLIB$$44ee6049.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:669) at org.springframework.batch.core.launch.support.SimpleJobOperator$$EnhancerBySpringCGLIB$$318ff269.restart(<generated>) at com.test.mypackage.batch.dao.BatchJobDaoImpl.restartJobExecution(BatchJobDaoImpl.java:62)がスローされます。

executionIdを使用して同じジョブを再開しようとすると、起動が失敗し、同じ例外が表示されます(上記を参照)。

マイコードは、ここに

@Autowired 
private DataSource dataSource; 
@Autowired 
private JobOperator jobOperator; 
@Override 
public Long stopRunningExecution(Long executionId) throws NoSuchJobExecutionException, JobExecutionNotRunningException { 
    jobOperator.stop(executionId); 
    return executionId; 
} 
@Override 
public Long restartJobExecution(long executionId) throws JobParametersInvalidException, JobRestartException, JobInstanceAlreadyCompleteException, NoSuchJobExecutionException, NoSuchJobException { 
    return jobOperator.restart(executionId); 
} 

いただきました間違って非常に簡単ですか?

答えて

0

同様のエラーが発生しましたが、問題を解決できました。

JobRegistryを定義していないため、問題が発生しています。 JobRegistryを定義してJobOperator Beanに追加すると、上記の例外は発生しません。例えば

@Bean 
public JobRegistry jobRegistry() { 
    return new MapJobRegistry(); 
} 

@Bean 
public JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor() { 
    JobRegistryBeanPostProcessor jobRegistryBeanPostProcessor = new JobRegistryBeanPostProcessor(); 
    jobRegistryBeanPostProcessor.setJobRegistry(jobRegistry()); 
    return jobRegistryBeanPostProcessor; 
} 

@Bean 
public JobOperator jobOperator() { 
    SimpleJobOperator jobOperator = new SimpleJobOperator(); 
    jobOperator.setJobExplorer(getJobExplorer()); 
    jobOperator.setJobRepository(getJobRepository()); 
    jobOperator.setJobLauncher(getJobLauncher()); 
    jobOperator.setJobRegistry(jobRegistry()); 

    return jobOperator; 
} 
関連する問題