spring-boot-api-seedling icon indicating copy to clipboard operation
spring-boot-api-seedling copied to clipboard

jedisConnectionFactory 方法有问题?

Open tangguochang opened this issue 6 years ago • 8 comments

主要问题: 导致redis的host设置无效?永远使用的本机redis?

tangguochang avatar Sep 14 '18 03:09 tangguochang

参考 https://blog.csdn.net/dawn_after_dark/article/details/82112399

tangguochang avatar Sep 14 '18 03:09 tangguochang

@tangguochang 具体问题是什么

Zoctan avatar Dec 03 '18 03:12 Zoctan

@tangguochang 具体问题是什么

就是说我把redies装在别的机器(和api不在一台机器)上时,程序是跑不起来的,你的api永远使用的是127.0.0.1的redis

tangguochang avatar Dec 04 '18 03:12 tangguochang

@tangguochang 在yml配置上改不生效吗

Zoctan avatar Dec 04 '18 08:12 Zoctan

@tangguochang 在yml配置上改不生效吗

是的 不生效

tangguochang avatar Dec 28 '18 12:12 tangguochang

我是这么解决的,修改com.package.core.config.RedisConfig部分内容如下:

//自动注入redis配置属性文件
@Autowired
private RedisProperties properties;

@Bean
public JedisPoolConfig jedisPoolConfig() {
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(properties.getJedis().getPool().getMaxIdle());
    config.setMaxTotal(properties.getJedis().getPool().getMaxActive());
    config.setMaxWaitMillis(properties.getJedis().getPool().getMaxWait().toMillis());
    return config;
}

@Bean
public RedisConnectionFactory redisConnectionFactory(
        @Qualifier(value = "jedisPoolConfig") final JedisPoolConfig jedisPoolConfig) {
    // 单机版 jedis
    final RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    redisStandaloneConfiguration.setHostName(properties.getHost());
    redisStandaloneConfiguration.setPort(properties.getPort());
    redisStandaloneConfiguration.setPassword(properties.getPassword());
    redisStandaloneConfiguration.setDatabase(properties.getDatabase());

    // 获得默认的连接池构造器
    final JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb =
            (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)
                    JedisClientConfiguration.builder();
    // 指定 jedisPoolConifig 来修改默认的连接池构造器
    jpcb.poolConfig(jedisPoolConfig);
    // 连接超时
    jpcb.and().connectTimeout(Duration.ofMillis(0));
    // 通过构造器来构造 jedis 客户端配置
    final JedisClientConfiguration jedisClientConfiguration = jpcb.build();
    // 单机配置 + 客户端配置 = jedis 连接工厂
    return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
}

thankuu avatar Jan 08 '19 10:01 thankuu

@thankuu 调试了下应该是配置文件中的redis属性没有成功注入,可以暂时这样解决,但还是希望有优雅点的方案

Zoctan avatar Jan 09 '19 10:01 Zoctan

我把jedis版本 改成<jedis.version>2.9.3</jedis.version>就可以了。

lulu002 avatar Nov 18 '19 03:11 lulu002