背景了解
参考阅读
版本redisson-spring-boot-starter-3.13.6
RedissonAutoConfiguration初始化源码解析
https://blog.youkuaiyun.com/lizz861109/article/details/109289430
redisson-spring-boot-starter-3.13.6版本之前的老版本是只有config方式,此版本开始增加了file配置方式
@ConfigurationProperties(
prefix = "spring.redis.redisson"
)
public class RedissonProperties {
private String config;
private String file;
public RedissonProperties() {
}
public String getConfig() {
return this.config;
}
public void setConfig(String config) {
this.config = config;
}
}
多环境配置redission
配置方式有多种
1.直接使用redission的Properties配置yml
2.使用spring的redis配置
3.从配置中心读取配置
直接使用redission的Properties配置
redisson-dev.yml
redisson-test.yml
redisson-uat.yml
import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.spring.starter.RedissonProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.Properties;
@Configuration
@RefreshScope
public class RedissonConfig {
@Autowired
private Environment env;
@Autowired
private NacosConfigProperties nacosConfigProperties;
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() throws IOException, NacosException {
String[] profiles = env.getActiveProfiles();
String profile = "";
if(profiles.length > 0) {
profile = "-" + profiles[0];
}
Config config = Config.fromYAML(new ClassPathResource("redisson" + profile + ".yml").getInputStream());
RedissonClient redisson = Redisson.create(config);
return redisson;
}
}
从spring redis中配置
spring redis配置
spring:
redis:
cluster:
nodes: 192.16.32.176:6371,192.16.32.176:6372
database: 0
password: password
maxAttempts: 5
timeout: 3000
pool:
maxActive: 300
maxIdle: 100
minIdle: 35
max-wait: 4000
maxWaitMillis: 3000
test-on-borrow: true
test-while-idle: true
自定义配置类
/**
*从spring redis中获取
* redisson 配置类
* @author jerry
*/
@Configuration
public class RedissonConfig implements EnvironmentAware {
private static final String PREFIX = "redis://";
private static final String HOST_KEY = "spring.redis.host";
private static final String PORT_KEY = "spring.redis.port";
private static final String CLUSTER_KEY = "spring.redis.cluster.nodes";
private static final String PASSWORD_KEY = "spring.redis.password";
private Environment environment;
@Bean
public RedissonClient getRedisson() {
String host = environment.getProperty(HOST_KEY);
String password = environment.getProperty(PASSWORD_KEY);
Config config = new Config();
if (!StringUtils.isEmpty(host)) {
String port = environment.getProperty(PORT_KEY);
if (StringUtils.isEmpty(port)) {
throw new IllegalArgumentException("[getRedisson] port is null.");
}
config.useSingleServer().setAddress(PREFIX + host + ":" + port);
if (!StringUtils.isEmpty(password)) {
config.useSingleServer().setPassword(password);
}
} else {
String cluster = environment.getProperty(CLUSTER_KEY);
if (StringUtils.isEmpty(cluster)) {
throw new IllegalArgumentException("[getRedisson] cluster is null.");
}
String[] nodes = cluster.split(",");
for (int i = 0; i < nodes.length; i++) {
nodes[i] = PREFIX + nodes[i];
}
config.useClusterServers().setScanInterval(2000).addNodeAddress(nodes);
if (!StringUtils.isEmpty(password)) {
config.useClusterServers().setPassword(password);
}
}
return Redisson.create(config);
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
}
nacos中读取配置
@Autowired
private RedissonProperties redssionProperties;
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() throws IOException, NacosException {
Properties properties = new Properties();
// nacos服务器地址,127.0.0.1:8848
properties.put(PropertyKeyConst.SERVER_ADDR, nacosConfigProperties.getServerAddr());
// 配置中心的命名空间id
properties.put(PropertyKeyConst.NAMESPACE, nacosConfigProperties.getNamespace());
ConfigService configService = NacosFactory.createConfigService(properties);
// 根据dataId、group定位到具体配置文件,获取其内容. 方法中的三个参数分别是: dataId, group, 超时时间
String content = configService.getConfig(redssionProperties.getConfig(), nacosConfigProperties.getGroup(), 3000L);
// 因为我的配置内容是JSON数组字符串,这里将字符串转为JSON数组
System.out.println(content);
Config config = Config.fromYAML(content);
RedissonClient redisson = Redisson.create(config);
return redisson;
}
spring:
redis:
redisson: redisson.yml
在nacos中增加配置redisson.yml