针对JedisShardInfo中无法修改db的解决办法

package com.ldr.bean;

import java.lang.reflect.Field;

import redis.clients.jedis.JedisShardInfo;

public class MyJedisInfo {
    
    String host;
    int port;
    int db;

    public JedisShardInfo newInstance() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {  
        JedisShardInfo jedisShardInfo=new JedisShardInfo(host,port) ;
        Class<? extends JedisShardInfo> clz = jedisShardInfo.getClass();
        Field declaredField = clz.getDeclaredField("db");
        declaredField.setAccessible(true);
        declaredField.set(jedisShardInfo, db);
        return jedisShardInfo;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getDb() {
        return db;
    }

    public void setDb(int db) {
        this.db = db;
    }
    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }  
}

spring中的application.xml中配置如下

    
    <!-- spring集成redis -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal">
        <value>${redis.maxTotal}</value>
        </property>
        <property name="maxIdle">
         <value>${redis.maxIdle}</value>
        </property>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
    </bean>
   
     <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"  scope="singleton">
        <constructor-arg index="0" ref="jedisPoolConfig" />
        <constructor-arg index="1">
            <list>
                <!-- <bean class="redis.clients.jedis.JedisShardInfo">
                    <constructor-arg name="host" value="${redis.host}" />
                    <constructor-arg name="port" value="${redis.port}" />
                </bean> -->
          
                <ref bean="jedisShardInfo"/><!-- 生产环境请换成上述 -->
            </list>
        </constructor-arg>
    </bean>
    
    <!-- 以下配置上生产请注释掉  begin-->
    <bean id="jedisFactory" class="com.ldr.bean.MyJedisInfo">
        <property name="host" value="${redis.host}"></property>
        <property name="port" value="${redis.port}"></property>
        <property name="db" value="${redis.db}"></property>
    </bean>  
     
    <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo"  
        factory-bean="jedisFactory" factory-method="newInstance" >  
    </bean> 
     <!-- 以上配置上生产请注释掉 end -->

 

转载于:https://www.cnblogs.com/wangyang108/p/8962925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值