| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package com.qqflow.engine.config;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.context.ApplicationContextInitializer;
- import org.springframework.context.ConfigurableApplicationContext;
- import org.springframework.core.env.Profiles;
- import redis.embedded.RedisServer;
- import java.io.IOException;
- import java.net.Socket;
- /**
- * 在 Spring Boot 启动最早期启动 Embedded Redis,确保 Redisson 等组件初始化时 Redis 已可用。
- * 仅在 dev 环境下生效。
- */
- @Slf4j
- public class EmbeddedRedisInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
- private static RedisServer redisServer;
- @Override
- public void initialize(ConfigurableApplicationContext applicationContext) {
- if (!applicationContext.getEnvironment().acceptsProfiles(Profiles.of("dev"))) {
- return;
- }
- 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 启动");
- }
- }
- private boolean isPortAvailable(int port) {
- try (Socket socket = new Socket("localhost", port)) {
- return false;
- } catch (IOException e) {
- return true;
- }
- }
- public static RedisServer getRedisServer() {
- return redisServer;
- }
- }
|