依赖:
<!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.6</version>
</dependency>
代码:
import java.lang.reflect.Method;
import java.util.Optional;
import org.redisson.Redisson;
import org.redisson.config.Config;
import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.util.ReflectionUtils;
import lombok.Getter;
import lombok.Setter;
@Configuration
@ConditionalOnClass({ Redisson.class, RedisOperations.class })
@EnableConfigurationProperties({ RedisProperties.class, CustomRedissonConfig.CustomRedissonProperties.class }) // 加载配置
public class CustomRedissonConfig {
/**
* Spring原始配置
*/
private final RedisProperties redisProperties;
/**
* 增强Redisson
*/
private final CustomRedissonProperties redissonProperties;
public CustomRedissonConfig(RedisProperties redisProperties, CustomRedissonProperties redissonProperties) {
this.redisProperties = redisProperties;
this.redissonProperties = redissonProperties;
}
@Bean
public RedissonAutoConfigurationCustomizer timeoutConfigurationCustomizer() {
return new TimeoutConfigurationCustomizer(redisProperties, redissonProperties);
}
/**
* 增强Redisson的Config配置
*/
public static class TimeoutConfigurationCustomizer implements RedissonAutoConfigurationCustomizer {
private final RedisProperties redisProperties;
private final CustomRedissonProperties redissonProperties;
public TimeoutConfigurationCustomizer(RedisProperties redisProperties, CustomRedissonProperties redissonProperties) {
this.redisProperties = redisProperties;
this.redissonProperties = redissonProperties;
}
@Override
public void customize(Config config) {
int timeout = Optional.ofNullable(redissonProperties.getTimeout()).orElse(3000);
// 选择模式
Method clusterMethod = ReflectionUtils.findMethod(RedisProperties.class, "getCluster");
if (clusterMethod != null && ReflectionUtils.invokeMethod(clusterMethod, this.redisProperties) != null) {
config.useClusterServers().setTimeout(timeout);
} else {
config.useSingleServer().setTimeout(timeout);
}
}
}
/**
* 增强Redisson配置
*/
@Getter
@Setter
@ConfigurationProperties(value = "spring.redisson.config") // 前缀
public static class CustomRedissonProperties {
/**
* response read time out (ms)
*/
private Integer timeout;
}
}
配置:
Properties配置示例
spring.redisson.config.timeout=5000