springboot配置redis多数据源

简介: springboot配置redis多数据源

背景


其实程序里配置多数据源的需求还是挺多的,我们有一个项目是双数据源的,但是看起来,代码乱糟糟的,所以查了查,找了一种配置看起来清爽一点的,下面上代码


代码


代码分两部分,yml配置和config代码配置


yml


spring:
  redis:
    database: 0
    host: xxxx.xxx.aliyuncs.com
    port: 6379
    password: password
    lettuce:
      pool:
        max-active: 100
        max-idle: 10
        max-wait: 3000
        min-idle: 10
    timeout: 3000
  redis2:
    database: 0
    host: xxxx.xxx2.aliyuncs.com
    port: 6379
    password: password2 


代码配置


package com.airdoc.auth.config;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
 * @author author
 * @date 2022/7/27
 * @apiNote
 */
@EnableCaching
@Configuration
public class MultiRedisConfig {
        @Value("${spring.redis.lettuce.pool.max-idle}")
        int maxIdle;
        @Value("${spring.redis.lettuce.pool.max-active}")
        int maxActive;
        @Value("${spring.redis.lettuce.pool.max-wait}")
        long maxWaitMillis;
        @Value("${spring.redis.lettuce.pool.min-idle}")
        int minIdle;
        @Value("${spring.redis.timeout}")
        int timeout;
        @Bean(name = "redisTemplate")
        public <T> RedisTemplate<String, T> redisTemplate(@Value("${spring.redis.database}") int database,
                                                 @Value("${spring.redis.host}") String hostName,
                                                 @Value("${spring.redis.port}") int port,
                                                 @Value("${spring.redis.password}") String password) {
            RedisTemplate<String, T> template = new RedisTemplate<>();
            template.setConnectionFactory(connectionFactory(database, hostName, port, password));
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            return template;
        }
        @Bean(name = "gbRedisTemplate")
        public StringRedisTemplate gbRedisTemplate(@Value("${spring.redis2.database}") int database,
                                                    @Value("${spring.redis2.host}") String hostName,
                                                    @Value("${spring.redis2.port}") int port,
                                                    @Value("${spring.redis2.password}") String password) {
            StringRedisTemplate temple = new StringRedisTemplate();
            temple.setConnectionFactory(connectionFactory(database, hostName, port, password));
            return temple;
        }
        /**
         * 使用lettuce配置Redis连接信息
         *
         * @param database Redis数据库编号
         * @param hostName 服务器地址
         * @param port     端口
         * @param password 密码
         * @return RedisConnectionFactory
         */
        public RedisConnectionFactory connectionFactory(int database, String hostName, int port, String password) {
            RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
            configuration.setHostName(hostName);
            configuration.setPort(port);
            if (StringUtils.isNotBlank(password)) {
                configuration.setPassword(password);
            }
            if (database != 0) {
                configuration.setDatabase(database);
            }
            GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
            genericObjectPoolConfig.setMaxIdle(maxIdle);
            genericObjectPoolConfig.setMinIdle(minIdle);
            genericObjectPoolConfig.setMaxTotal(maxActive);
            genericObjectPoolConfig.setMaxWaitMillis(maxWaitMillis);
            LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
                    .commandTimeout(Duration.ofMillis(timeout))
                    .poolConfig(genericObjectPoolConfig)
                    .build();
            LettuceConnectionFactory lettuce = new LettuceConnectionFactory(configuration, clientConfig);
            lettuce.afterPropertiesSet();
            return lettuce;
        }
}


总结


其实实现方式还是挺多的,还有一种我看也挺好玩,有兴趣可以看一下,指路 :Redis多数据源

相关文章
|
6月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
1079 0
|
3月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
349 5
|
3月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
3月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
386 3
|
4月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
698 5
|
4月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
311 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
4月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
230 0
探索Spring Boot的@Conditional注解的上下文配置
|
5月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1135 10
|
6月前
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
530 9
|
6月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
1300 1