如何修改spring-boot-starter-data-redis的默认配置属性?
让spring-boot-starter-data-redis自定义前缀配置生效的方案
默认情况下,spring-boot-starter-data-redis的自动配置只会读取spring.redis前缀的配置项。要让自定义的redis前缀配置生效,需要手动覆盖默认的Redis配置逻辑,步骤如下:
1. 定义自定义Redis属性类
创建一个类来绑定自定义前缀的配置项,使用@ConfigurationProperties指定前缀为redis:
import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "redis") public class CustomRedisProperties { private String host; private int port; private String password; private int timeout; // 生成getter和setter方法 public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } }
2. 启用配置属性绑定
在项目的主启动类或者配置类上添加@EnableConfigurationProperties注解,开启自定义属性类的绑定功能:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication @EnableConfigurationProperties(CustomRedisProperties.class) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3. 自定义Redis连接配置
创建自定义的Redis配置类,基于自定义属性生成连接工厂和RedisTemplate,替代默认的自动配置:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class CustomRedisConfig { private final CustomRedisProperties redisProperties; // 构造注入自定义属性类 public CustomRedisConfig(CustomRedisProperties redisProperties) { this.redisProperties = redisProperties; } @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName(redisProperties.getHost()); config.setPort(redisProperties.getPort()); if (redisProperties.getPassword() != null && !redisProperties.getPassword().isEmpty()) { config.setPassword(redisProperties.getPassword()); } config.setConnectTimeout(java.time.Duration.ofMillis(redisProperties.getTimeout())); return new LettuceConnectionFactory(config); } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); // 设置序列化器避免乱码 template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new StringRedisSerializer()); return template; } }
4. 验证配置
确保你的application.yml中使用自定义前缀的配置:
redis: host: localhost port: 6379 password: pass timeout: 5000
这样配置后,项目启动时就会读取redis前缀的配置项,而非默认的spring.redis。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

