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