У меня есть реализация (выполняющая некоторые операции и сохраняющая объект в базе данных) до его запуска по электронной почте и обновления данных в таблице BATCH_JOB_EXECUTION_CONTEXT
.
При выполнении этой операции приложение выдает исключение. Пожалуйста, найдите исключение ниже.
2019-10-01 00:00:01,379 [pool-3-thread-1] INFO core.batch.tasklet.RemoveSpringBatchHistoryTasklet: 70 - Remove the Spring Batch history before the 9/1/19 12:00 AM
2019-10-01 00:00:19,082 [pool-3-thread-1] INFO core.batch.tasklet.RemoveSpringBatchHistoryTasklet: 73 - Deleted rows number from the BATCH_STEP_EXECUTION_CONTEXT table: 1293132
2019-10-01 00:01:17,216 [pool-3-thread-1] INFO core.batch.tasklet.RemoveSpringBatchHistoryTasklet: 77 - Deleted rows number from the BATCH_STEP_EXECUTION table: 1293132
2019-10-01 00:01:26,461 [pool-3-thread-1] INFO core.batch.tasklet.RemoveSpringBatchHistoryTasklet: 81 - Deleted rows number from the BATCH_JOB_EXECUTION_CONTEXT table: 1295359
2019-10-01 00:03:20,615 [WebContainer-9] ERROR com.api.controller.BaseController: 82 - Unhandled exception while processing request for URL : https://scsbatch.com:9152/jobs/emails with exception : PreparedStatementCallback; SQL [INSERT INTO BATCH_JOB_EXECUTION_CONTEXT (SHORT_CONTEXT, SERIALIZED_CONTEXT, JOB_EXECUTION_ID) VALUES(?, ?, ?)]; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
org.springframework.dao.CannotAcquireLockException: PreparedStatementCallback; SQL [INSERT INTO BATCH_JOB_EXECUTION_CONTEXT (SHORT_CONTEXT, SERIALIZED_CONTEXT, JOB_EXECUTION_ID) VALUES(?, ?, ?)]; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
Несмотря на то, что оно выдает исключение, оно отправляет электронную почту и обновленную информацию в таблице базы данных.
Пожалуйста, найдите мой код ниже.
@Override
@Transactional
public void approve(Long id, ClaimApproval claimApproval) {
Claim claim = claimRepository.findOne(id);
ClaimAssignment claimAssignment = claim.findNextPendingAssignment();
claim.incrementApprovalLevel();
claim.addHistory(historyRecordFor(claimApproval, HistoryAction.APPROVED));
claimRepository.save(claim);
if (!areAllAssignmentsApproved(claim))
emailDispatcherService.notifyNextClaimApprover(claim, assignmentService.getNextLevelApprovers(claim)); //Exception is throws here, but previous statements are executed properly and that should not happen when exception thrown.
}