複数のインスタンス上でバッチジョブを実行しようとしているときにDuplicateKey例外

サチン:

私は、同じパラメータを持つと同時に、クラスタ内のバッチジョブを実行しています。しかし、それは唯一のインスタンス上で実行されているが、私は取得しています例外があることをその罰金:

Detail: Key (job_name, job_key)=(offlineTicketRefreshJob, c5d36835a13fd8ae0e91a69a6fa1c2d8) already exists.; nested exception is org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "job_inst_un"

私はそれがJobAlreadyRunningExceptionか一方を与えることを期待していました。私は、分離レベルはまた、なぜそれがPSQLExceptionを与えているバッチ・ジョブ・リポジトリの直列化可能であると思いますか?

マフムード・ベンHassine:

あなたが正しくあなたの仕事のリポジトリ上の分離レベルを設定した場合、それは起こるべきではありません。あなたはあなたの仕事のリポジトリ設定を共有しませんでしたが、あなたはint型の例を見つけることができJobRepository設定JobRepositoryのトランザクション設定をセクション:

// This would reside in your BatchConfigurer implementation
@Override
protected JobRepository createJobRepository() throws Exception {
   JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
   factory.setDataSource(dataSource);
   factory.setTransactionManager(transactionManager);
   factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE");
   factory.setTablePrefix("BATCH_");
   factory.setMaxVarCharLength(1000);
   return factory.getObject();
}

積極的な分離レベルは、クラスタ環境での複製ジョブのインスタンスを作成しないように。SERIALIZABLEそして、READ_COMMITTED動作するはずです。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=374128&siteId=1