1. import java.io.IOException;
  2. import java.net.URI;
  3. import java.net.http.HttpClient;
  4. import java.net.http.HttpRequest;
  5. import java.net.http.HttpResponse;
  6. import java.time.Duration;
  7. import java.util.concurrent.Executors;
  8. import java.util.concurrent.ScheduledExecutorService;
  9. import java.util.concurrent.TimeUnit;
  10. public class MaintenanceTaskBinder {
  11. private final String targetUrl;
  12. private final long retryIntervalSeconds;
  13. private final int maxRetries;
  14. private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
  15. public MaintenanceTaskBinder(String targetUrl, long retryIntervalSeconds, int maxRetries) {
  16. this.targetUrl = targetUrl;
  17. this.retryIntervalSeconds = retryIntervalSeconds;
  18. this.maxRetries = maxRetries;
  19. }
  20. public void performMaintenanceTask() {
  21. int retryCount = 0;
  22. while (retryCount <= maxRetries) {
  23. try {
  24. // Create HTTP request
  25. HttpRequest request = HttpRequest.get(URI.create(targetUrl));
  26. // Execute HTTP request
  27. HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
  28. // Check response status code
  29. if (response.statusCode() >= 200 && response.statusCode() < 300) {
  30. System.out.println("Maintenance task successful.");
  31. return; // Task successful, exit the loop
  32. } else {
  33. System.out.println("Maintenance task failed with status code: " + response.statusCode());
  34. retryCount++;
  35. if (retryCount > maxRetries) {
  36. System.out.println("Maximum retries reached. Maintenance task failed.");
  37. return;
  38. }
  39. // Schedule retry
  40. scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
  41. }
  42. } catch (IOException e) {
  43. System.err.println("IO Error: " + e.getMessage());
  44. retryCount++;
  45. if (retryCount > maxRetries) {
  46. System.out.println("Maximum retries reached. Maintenance task failed.");
  47. return;
  48. }
  49. scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
  50. } catch (Exception e) {
  51. System.err.println("Unexpected error: " + e.getMessage());
  52. retryCount++;
  53. if (retryCount > maxRetries) {
  54. System.out.println("Maximum retries reached. Maintenance task failed.");
  55. return;
  56. }
  57. scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
  58. }
  59. }
  60. }
  61. public void startMaintenance() {
  62. performMaintenanceTask();
  63. }
  64. public void stop() {
  65. scheduler.shutdown();
  66. try {
  67. scheduler.awaitTermination(1, TimeUnit.MINUTES);
  68. } catch (InterruptedException e) {
  69. Thread.currentThread().interrupt();
  70. }
  71. }
  72. }

Add your comment