From b35b0e82543d60aba57579c0032fba169a2f76be Mon Sep 17 00:00:00 2001
From: Alok Kumar <59380269+AlokSP@users.noreply.github.com>
Date: Tue, 20 May 2025 12:22:29 +0530
Subject: [PATCH] Retryable and logback
---
pom.xml | 8 ++++++
.../elasticsearch/config/RetryConfig.java | 9 +++++++
.../controllers/HomeController.java | 6 +----
.../elasticsearch/models/QueueManagement.java | 14 +++++-----
.../services/DocumentSearchService.java | 26 +++++++++++++++++++
src/main/resources/logback.xml | 15 ++++++++---
6 files changed, 63 insertions(+), 15 deletions(-)
create mode 100644 src/main/java/org/spoken_tutorial/health/elasticsearch/config/RetryConfig.java
diff --git a/pom.xml b/pom.xml
index 79990d8..9691a37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,14 @@
poi-ooxml
5.2.5
+
+ org.springframework.retry
+ spring-retry
+
+
+ org.springframework
+ spring-aspects
+
diff --git a/src/main/java/org/spoken_tutorial/health/elasticsearch/config/RetryConfig.java b/src/main/java/org/spoken_tutorial/health/elasticsearch/config/RetryConfig.java
new file mode 100644
index 0000000..7a28362
--- /dev/null
+++ b/src/main/java/org/spoken_tutorial/health/elasticsearch/config/RetryConfig.java
@@ -0,0 +1,9 @@
+package org.spoken_tutorial.health.elasticsearch.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.retry.annotation.EnableRetry;
+
+@EnableRetry
+@Configuration
+public class RetryConfig {
+}
\ No newline at end of file
diff --git a/src/main/java/org/spoken_tutorial/health/elasticsearch/controllers/HomeController.java b/src/main/java/org/spoken_tutorial/health/elasticsearch/controllers/HomeController.java
index 51f23f3..62a0e17 100644
--- a/src/main/java/org/spoken_tutorial/health/elasticsearch/controllers/HomeController.java
+++ b/src/main/java/org/spoken_tutorial/health/elasticsearch/controllers/HomeController.java
@@ -17,7 +17,6 @@
import org.spoken_tutorial.health.elasticsearch.config.Config;
import org.spoken_tutorial.health.elasticsearch.models.DocumentSearch;
import org.spoken_tutorial.health.elasticsearch.models.QueueManagement;
-import org.spoken_tutorial.health.elasticsearch.repositories.DocumentSearchRepository;
import org.spoken_tutorial.health.elasticsearch.repositories.QueueManagementRepository;
import org.spoken_tutorial.health.elasticsearch.services.DocumentSearchService;
import org.spoken_tutorial.health.elasticsearch.services.QueueManagementService;
@@ -39,9 +38,6 @@ public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
- @Autowired
- private DocumentSearchRepository docuSearchRepo;
-
@Autowired
private QueueManagementRepository queRepo;
@@ -132,7 +128,7 @@ else if (status.equals(Config.STATUS_FAILED)) {
public Map documentStatus(@PathVariable String documentId) {
Map resultMap = new HashMap<>();
- DocumentSearch documentSearch = docuSearchRepo.findByDocumentId(documentId);
+ DocumentSearch documentSearch = docuSearchService.findByDocumentId(documentId);
if (documentSearch == null) {
resultMap.put(Config.STATUS, Config.STATUS_NOTFOUND);
diff --git a/src/main/java/org/spoken_tutorial/health/elasticsearch/models/QueueManagement.java b/src/main/java/org/spoken_tutorial/health/elasticsearch/models/QueueManagement.java
index 5fafed9..a4be266 100644
--- a/src/main/java/org/spoken_tutorial/health/elasticsearch/models/QueueManagement.java
+++ b/src/main/java/org/spoken_tutorial/health/elasticsearch/models/QueueManagement.java
@@ -10,8 +10,8 @@
import org.spoken_tutorial.health.elasticsearch.JsonService.JsonService;
import org.spoken_tutorial.health.elasticsearch.config.Config;
import org.spoken_tutorial.health.elasticsearch.contentfile.ContentsfromFile;
-import org.spoken_tutorial.health.elasticsearch.repositories.DocumentSearchRepository;
import org.spoken_tutorial.health.elasticsearch.repositories.QueueManagementRepository;
+import org.spoken_tutorial.health.elasticsearch.services.DocumentSearchService;
import org.spoken_tutorial.health.elasticsearch.threadpool.TaskProcessingService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +29,7 @@ public class QueueManagement implements Runnable {
@Autowired
@Transient
- private DocumentSearchRepository docRepo;
+ private DocumentSearchService docSearchService;
@Autowired
@Transient
@@ -413,7 +413,7 @@ public void run() {
logger.info("{}", getStatusLog());
setStartTime(System.currentTimeMillis());
- documentSearch = docRepo.findByDocumentId(getDocumentId());
+ documentSearch = docSearchService.findByDocumentId(getDocumentId());
if (getRequestType().equals(Config.ADD_DOCUMENT)) {
if (documentSearch != null) {
@@ -480,7 +480,7 @@ public void run() {
documentSearch.setRank(getRank());
documentSearch.setViewUrl(getViewUrl());
- docRepo.save(documentSearch);
+ docSearchService.save(documentSearch);
setStatus(Config.STATUS_DONE);
logger.info("{}", getStatusLog());
@@ -578,7 +578,7 @@ else if (getLanguageId() != documentSearch.getLanguageId()) {
if (getOrderValue() != 0)
documentSearch.setOrderValue(getOrderValue());
- docRepo.save(documentSearch);
+ docSearchService.save(documentSearch);
setStatus(Config.STATUS_DONE);
logger.info("{}", getStatusLog());
@@ -591,14 +591,14 @@ else if (getRequestType().equals(Config.UPDATE_DOCUMENT_RANK)) {
documentSearch.setChangeTime(System.currentTimeMillis());
}
- docRepo.save(documentSearch);
+ docSearchService.save(documentSearch);
setStatus(Config.STATUS_DONE);
logger.info("{}", getStatusLog());
}
else if (getRequestType().equals(Config.DELETE_DOCUMENT)) {
- docRepo.delete(documentSearch);
+ docSearchService.delete(documentSearch);
setStatus(Config.STATUS_DONE);
logger.info("{}", getStatusLog());
diff --git a/src/main/java/org/spoken_tutorial/health/elasticsearch/services/DocumentSearchService.java b/src/main/java/org/spoken_tutorial/health/elasticsearch/services/DocumentSearchService.java
index b030d18..1a52616 100644
--- a/src/main/java/org/spoken_tutorial/health/elasticsearch/services/DocumentSearchService.java
+++ b/src/main/java/org/spoken_tutorial/health/elasticsearch/services/DocumentSearchService.java
@@ -1,5 +1,7 @@
package org.spoken_tutorial.health.elasticsearch.services;
+import java.io.IOException;
+
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.Parser;
import org.slf4j.Logger;
@@ -10,6 +12,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Recover;
+import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
@@ -45,4 +50,25 @@ public ResponseEntity addContent(@PathVariable String path, @Pat
return new ResponseEntity<>(tut, HttpStatus.OK);
}
+
+ public DocumentSearch findByDocumentId(String documentId) {
+ return repo.findByDocumentId(documentId);
+ }
+
+ public void delete(DocumentSearch documentSearch) {
+ repo.delete(documentSearch);
+ }
+
+ @Retryable(retryFor = { IOException.class,
+ RuntimeException.class }, maxAttempts = 5, backoff = @Backoff(delay = 5000))
+ public void save(DocumentSearch documentSearch) {
+ repo.save(documentSearch);
+ }
+
+ @Recover
+ public void recover(Exception e, DocumentSearch documentSearch) {
+ // Handle failure after retries
+ logger.error("Failed to save document after retries", e);
+ }
+
}
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index 9ebf042..413d830 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -19,10 +19,19 @@
%d %p %c{1} [%t] %X{queueId} %m%n
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+