多环境配置redission

本文介绍Redisson在Spring Boot中的配置方式,包括使用YAML文件、Spring Redis配置及Nacos配置中心等多种配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景了解

参考阅读
版本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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值