Spring+Jedis分庫的問題

今天部署新項目,需要用redis的另一個庫,本項目用的是

<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

由於要用數據庫分片,用的是shareJedis

查看了下redis.clients.jedis.JedisShardInfo ,有db參數

 private int connectionTimeout;
  private int soTimeout;
  private String host;
  private int port;
  private String password = null;
  private String name = null;
  // Default Redis DB
  private int db = 0;
  private boolean ssl;
  private SSLSocketFactory sslSocketFactory;
  private SSLParameters sslParameters;
  private HostnameVerifier hostnameVerifier;

有db參數,但是並沒有用db作爲構造參數,有setDb方法但是並沒有getDb方法。

作爲spring框架,並無法注入,JedisShardInfo 配置有方法

  public JedisShardInfo(String host) {
    super(Sharded.DEFAULT_WEIGHT);
    URI uri = URI.create(host);
    if (JedisURIHelper.isValid(uri)) {
      this.host = uri.getHost();
      this.port = uri.getPort();
      this.password = JedisURIHelper.getPassword(uri);
      this.db = JedisURIHelper.getDBIndex(uri);
      this.ssl = uri.getScheme().equals("rediss");
    } else {
      this.host = host;
      this.port = Protocol.DEFAULT_PORT;
    }
  }

方法就是轉化爲uri但是對於本人來並不適用

於是就寫個類繼承方法:

public class MyShareRedisInfo extends JedisShardInfo{
	private int db=0;
	public MyShareRedisInfo(String host, int port, int db) {
		super(host, port);
		this.setDb(db);
	}
	public int getDb() {
		return db;
	}
	public void setDb(int db) {
		this.db = db;
	}
}
然後配置
<bean id="jedisShardInfo" class="**.web.utils.redis.MyShareRedisInfo">
		<constructor-arg index="0" value="${redis.ip}" />
		<constructor-arg index="1" value="${redis.port}" type="int" />
		<constructor-arg index="2" value="${redis.dbIndex}" />
		<property name="password" value="${redis.pass}" />
	</bean>

完美解決


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章