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