diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java index 553add8a4..2e566a4b5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanAccrualsProcessingServiceImpl.java @@ -161,19 +161,23 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing loans.forEach(outerLoan -> { loanTasks.add(taskExecutor.submit(() -> { - ThreadLocalContextUtil.init(context); - transactionTemplate.executeWithoutResult(status -> { - Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(outerLoan.getId()); - setSetHelpers(loan); - try { - log.debug("Adding accruals for loan '{}'", loan.getId()); - addAccruals(loan, tillDate, false, false, true); - log.debug("Successfully processed loan: '{}' for accrual entries", loan.getId()); - } catch (Exception e) { - log.error("Failed to add accrual for loan {}", loan.getId(), e); - throw new RuntimeException("Failed to add accrual for loan " + loan.getId(), e); - } - }); + try { + ThreadLocalContextUtil.init(context); + transactionTemplate.executeWithoutResult(status -> { + Loan loan = loanRepositoryWrapper.findOneWithNotFoundDetection(outerLoan.getId()); + setSetHelpers(loan); + try { + log.debug("Adding accruals for loan '{}'", loan.getId()); + addAccruals(loan, tillDate, false, false, true); + log.debug("Successfully processed loan: '{}' for accrual entries", loan.getId()); + } catch (Exception e) { + log.error("Failed to add accrual for loan {}", loan.getId(), e); + throw new RuntimeException("Failed to add accrual for loan " + loan.getId(), e); + } + }); + } finally { + ThreadLocalContextUtil.reset(); + } })); });