Web アプリケーションがあり、ファイルをアップロードするとすぐにファイルをアップロードし、ジョブ ランチャーと非同期タスク エグゼキュータを使用してジョブを起動します。したがって、技術的には、ジョブは独自のスレッドで実行されます。春のバッチ ジョブは csv を吐き出し、データベースにインポートし、データに対していくつかの検証を行います。したがって、無効な日付によるフラットファイルの解析エラーなどのステップ中のあらゆる種類の例外は、私が使用するすべての例外です
jobExecution.getAllFailureExceptions()
リスナーを使用して、ジョブの最後にエラーメールで送信されます。そして、ファイルをアップロードしたユーザーは、スレッドを 4 分間スリープさせます
while(isJobRunning(jobId)) {
if(count == 0)
break;
Thread.sleep(sleepMilliSeconds);
count--;
}
次に、UI でユーザーにステップ レベルとジョブ レベルのすべての検証エラー メッセージを表示する前にジョブが完了した場合。だから今私は使用します
jobExecution = jobExplorer.getJobExecution(jobExecution.getId());
これを行うと、jobExecution.getAllFailureExceptions()
空の例外が返されます。データベース ジョブ リポジトリの列「EXIT_MESSAGE」BATCH_JOB_EXECUTION および BATCH_JOB_STEP_EXECUTION に、ステップの例外とジョブ レベルの例外が表示されますが、ジョブ エクスプローラーを使用してジョブ実行を取得すると、それらは読み込まれません。回避策はありますか? ステップ実行の例外とジョブの例外を取得するには、カスタム クエリを作成する必要がありますか? 私を助けてください。
以下は私のジョブリポジトリ、jobexplorer、および taskexecutor 構成です
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="batchDataSource" />
<property name="transactionManager" ref="batchTransactionManager" />
<property name="databaseType" value="Oracle" />
<property name="isolationLevelForCreate" value="ISOLATION_DEFAULT" />
</bean>
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="taskExecutor" />
</bean>
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="1" />
<property name="maxPoolSize" value="3" />
</bean>
<bean id="jobExplorer"
class="org.springframework.batch.core.explore.support.JobExplorerFactoryBean">
<property name="dataSource" ref="batchDataSource"/>
</bean>