import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class MaintenanceTaskBinder {
private final String targetUrl;
private final long retryIntervalSeconds;
private final int maxRetries;
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public MaintenanceTaskBinder(String targetUrl, long retryIntervalSeconds, int maxRetries) {
this.targetUrl = targetUrl;
this.retryIntervalSeconds = retryIntervalSeconds;
this.maxRetries = maxRetries;
}
public void performMaintenanceTask() {
int retryCount = 0;
while (retryCount <= maxRetries) {
try {
// Create HTTP request
HttpRequest request = HttpRequest.get(URI.create(targetUrl));
// Execute HTTP request
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
// Check response status code
if (response.statusCode() >= 200 && response.statusCode() < 300) {
System.out.println("Maintenance task successful.");
return; // Task successful, exit the loop
} else {
System.out.println("Maintenance task failed with status code: " + response.statusCode());
retryCount++;
if (retryCount > maxRetries) {
System.out.println("Maximum retries reached. Maintenance task failed.");
return;
}
// Schedule retry
scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
}
} catch (IOException e) {
System.err.println("IO Error: " + e.getMessage());
retryCount++;
if (retryCount > maxRetries) {
System.out.println("Maximum retries reached. Maintenance task failed.");
return;
}
scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
} catch (Exception e) {
System.err.println("Unexpected error: " + e.getMessage());
retryCount++;
if (retryCount > maxRetries) {
System.out.println("Maximum retries reached. Maintenance task failed.");
return;
}
scheduler.schedule(() -> performMaintenanceTask(), retryIntervalSeconds, TimeUnit.SECONDS);
}
}
}
public void startMaintenance() {
performMaintenanceTask();
}
public void stop() {
scheduler.shutdown();
try {
scheduler.awaitTermination(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
Add your comment