From c6ad9c1caf31b0234f222051aade22f774ba4ddf Mon Sep 17 00:00:00 2001 From: Sujin Kim Date: Sat, 23 Nov 2024 22:13:38 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20redis=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../dev/infra/config/PropertiesConfig.java | 4 ++- .../dev/infra/config/redis/RedisConfig.java | 32 +++++++++++++++++++ .../infra/config/redis/RedisProperties.java | 6 ++++ src/main/resources/application-redis.yaml | 9 ++++++ src/main/resources/application.yaml | 1 + 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gigedi/dev/infra/config/redis/RedisConfig.java create mode 100644 src/main/java/gigedi/dev/infra/config/redis/RedisProperties.java create mode 100644 src/main/resources/application-redis.yaml diff --git a/build.gradle b/build.gradle index 32ff966..aa4f124 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation "jakarta.persistence:jakarta.persistence-api:${jakartaPersistenceVersion}" implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:${springdocVersion}" + implementation 'org.springframework.boot:spring-boot-starter-data-redis' // QueryDSL implementation "com.querydsl:querydsl-jpa:${querydslVersion}:jakarta" diff --git a/src/main/java/gigedi/dev/infra/config/PropertiesConfig.java b/src/main/java/gigedi/dev/infra/config/PropertiesConfig.java index 431725d..6b6e6a6 100644 --- a/src/main/java/gigedi/dev/infra/config/PropertiesConfig.java +++ b/src/main/java/gigedi/dev/infra/config/PropertiesConfig.java @@ -7,12 +7,14 @@ import gigedi.dev.infra.config.oauth.DiscordProperties; import gigedi.dev.infra.config.oauth.FigmaProperties; import gigedi.dev.infra.config.oauth.GoogleProperties; +import gigedi.dev.infra.config.redis.RedisProperties; @Configuration @EnableConfigurationProperties({ GoogleProperties.class, JwtProperties.class, DiscordProperties.class, - FigmaProperties.class + FigmaProperties.class, + RedisProperties.class }) public class PropertiesConfig {} diff --git a/src/main/java/gigedi/dev/infra/config/redis/RedisConfig.java b/src/main/java/gigedi/dev/infra/config/redis/RedisConfig.java new file mode 100644 index 0000000..a3eab46 --- /dev/null +++ b/src/main/java/gigedi/dev/infra/config/redis/RedisConfig.java @@ -0,0 +1,32 @@ +package gigedi.dev.infra.config.redis; + +import java.time.Duration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; + +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class RedisConfig { + private final RedisProperties redisProperties; + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + RedisStandaloneConfiguration redisConfig = + new RedisStandaloneConfiguration(redisProperties.host(), redisProperties.port()); + if (!redisProperties.password().isBlank()) + redisConfig.setPassword(redisProperties.password()); + LettuceClientConfiguration clientConfig = + LettuceClientConfiguration.builder() + .commandTimeout(Duration.ofSeconds(1)) + .shutdownTimeout(Duration.ZERO) + .build(); + return new LettuceConnectionFactory(redisConfig, clientConfig); + } +} diff --git a/src/main/java/gigedi/dev/infra/config/redis/RedisProperties.java b/src/main/java/gigedi/dev/infra/config/redis/RedisProperties.java new file mode 100644 index 0000000..b3f4d21 --- /dev/null +++ b/src/main/java/gigedi/dev/infra/config/redis/RedisProperties.java @@ -0,0 +1,6 @@ +package gigedi.dev.infra.config.redis; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "spring.data.redis") +public record RedisProperties(String host, int port, String password) {} diff --git a/src/main/resources/application-redis.yaml b/src/main/resources/application-redis.yaml new file mode 100644 index 0000000..c7fdfaf --- /dev/null +++ b/src/main/resources/application-redis.yaml @@ -0,0 +1,9 @@ +spring: + config: + activate: + on-profile: "redis" + data: + redis: + host: ${REDIS_HOST:localhost} + port: ${REDIS_PORT:6379} + password: ${REDIS_PASSWORD:} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index cffc7e7..5b79fce 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -6,3 +6,4 @@ spring: dev: "dev, datasource, log" include: - security + - redis