TaxonomyHealthIndicator.java
package com.taxonomy.shared.config;
import com.taxonomy.catalog.service.TaxonomyService;
import org.springframework.boot.health.contributor.Health;
import org.springframework.boot.health.contributor.HealthIndicator;
import org.springframework.stereotype.Component;
/**
* Custom health indicator that reports taxonomy initialization status.
* Visible at {@code /actuator/health} as the "taxonomy" component.
*/
@Component
public class TaxonomyHealthIndicator implements HealthIndicator {
private final TaxonomyService taxonomyService;
public TaxonomyHealthIndicator(TaxonomyService taxonomyService) {
this.taxonomyService = taxonomyService;
}
@Override
public Health health() {
String status = taxonomyService.getInitStatus();
boolean initialized = taxonomyService.isInitialized();
Health.Builder builder = initialized ? Health.up() : Health.down();
builder.withDetail("initStatus", status);
builder.withDetail("initialized", initialized);
// Add memory info
Runtime rt = Runtime.getRuntime();
long heapUsed = rt.totalMemory() - rt.freeMemory();
long heapMax = rt.maxMemory();
builder.withDetail("heapUsedMB", heapUsed / (1024 * 1024));
builder.withDetail("heapMaxMB", heapMax / (1024 * 1024));
builder.withDetail("heapUsagePercent", Math.round((double) heapUsed / heapMax * 100));
return builder.build();
}
}