今天部署新項目,需要用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>
完美解決