針對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中配置以下java

<!-- 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 -->
相關文章
相關標籤/搜索