EmbeddedRedisConfig.java 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.qqflow.engine.config;
  2. import jakarta.annotation.PostConstruct;
  3. import jakarta.annotation.PreDestroy;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.context.annotation.Configuration;
  6. import redis.embedded.RedisServer;
  7. import java.io.IOException;
  8. import java.net.Socket;
  9. @Slf4j
  10. @Configuration
  11. public class EmbeddedRedisConfig {
  12. private RedisServer redisServer;
  13. @PostConstruct
  14. public void startRedis() {
  15. if (isPortAvailable(6379)) {
  16. try {
  17. log.info("本地 Redis 未检测到,启动 Embedded Redis (端口: 6379)...");
  18. redisServer = new RedisServer(6379);
  19. redisServer.start();
  20. log.info("Embedded Redis 启动成功");
  21. } catch (IOException e) {
  22. log.error("Embedded Redis 启动失败", e);
  23. }
  24. } else {
  25. log.info("检测到外部 Redis 正在运行 (端口: 6379),跳过 Embedded Redis 启动");
  26. }
  27. }
  28. @PreDestroy
  29. public void stopRedis() {
  30. if (redisServer != null && redisServer.isActive()) {
  31. try {
  32. log.info("正在停止 Embedded Redis...");
  33. redisServer.stop();
  34. } catch (IOException e) {
  35. log.error("Embedded Redis 停止失败", e);
  36. }
  37. }
  38. }
  39. private boolean isPortAvailable(int port) {
  40. try (Socket socket = new Socket("localhost", port)) {
  41. return false;
  42. } catch (IOException e) {
  43. return true;
  44. }
  45. }
  46. }