Files
springboot-api/src/main/java/com/vrobot/api/controller/HealthController.java

63 lines
2.0 KiB
Java

package com.vrobot.api.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.persistence.EntityManager;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HealthController {
@Autowired
private EntityManager entityManager;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@GetMapping("/")
public Map<String, Object> home() {
Map<String, Object> response = new HashMap<>();
response.put("service", "Spring Boot API");
response.put("status", "running");
response.put("timestamp", LocalDateTime.now());
response.put("endpoints", Map.of(
"health", "/api/health",
"actuator", "/actuator/health"
));
return response;
}
@GetMapping("/api/health")
public Map<String, Object> health() {
Map<String, Object> response = new HashMap<>();
boolean mysqlConnected = false;
try {
entityManager.createNativeQuery("SELECT 1").getSingleResult();
mysqlConnected = true;
} catch (Exception e) {
}
boolean redisConnected = false;
try {
redisTemplate.opsForValue().set("health-check", LocalDateTime.now().toString());
String value = redisTemplate.opsForValue().get("health-check");
redisConnected = value != null;
} catch (Exception e) {
}
response.put("status", mysqlConnected && redisConnected ? "UP" : "DOWN");
response.put("timestamp", LocalDateTime.now());
response.put("mysql", mysqlConnected ? "connected" : "disconnected");
response.put("redis", redisConnected ? "connected" : "disconnected");
response.put("message", "Spring Boot API for vrobot.shop");
return response;
}
}