package com.qqflow.engine.config; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import redis.embedded.RedisServer; import java.io.IOException; import java.net.Socket; @Slf4j @Configuration public class EmbeddedRedisConfig { private RedisServer redisServer; @PostConstruct public void startRedis() { if (isPortAvailable(6379)) { try { log.info("本地 Redis 未检测到,启动 Embedded Redis (端口: 6379)..."); redisServer = new RedisServer(6379); redisServer.start(); log.info("Embedded Redis 启动成功"); } catch (IOException e) { log.error("Embedded Redis 启动失败", e); } } else { log.info("检测到外部 Redis 正在运行 (端口: 6379),跳过 Embedded Redis 启动"); } } @PreDestroy public void stopRedis() { if (redisServer != null && redisServer.isActive()) { try { log.info("正在停止 Embedded Redis..."); redisServer.stop(); } catch (IOException e) { log.error("Embedded Redis 停止失败", e); } } } private boolean isPortAvailable(int port) { try (Socket socket = new Socket("localhost", port)) { return false; } catch (IOException e) { return true; } } }