You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:32:44