All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.logicbus.redis.context.RedisPool Maven / Gradle / Ivy
package com.logicbus.redis.context;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.w3c.dom.Element;
import com.alogic.pool.impl.Queued;
import com.alogic.sda.SDAFactory;
import com.alogic.sda.SecretDataArea;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
import com.anysoft.util.XmlElementProperties;
import com.anysoft.util.code.Coder;
import com.anysoft.util.code.CoderFactory;
import com.logicbus.redis.client.Client;
import com.logicbus.redis.client.Protocol;
import com.logicbus.redis.util.RedisContextException;
/**
* 连接池
*
* @author duanyy
* @version 1.6.6.9 [20161209 duanyy]
* - 从新的框架下继承
*
* @version 1.6.10.4 [20171017 duanyy]
* - 优化密码取值功能
*
* @version 1.6.10.8 [20171122 duanyy]
* - 支持用户名密码等信息实时从SDA获取
*/
public class RedisPool extends Queued{
/**
* host
*/
protected String host;
/**
* port
*/
protected int port = Protocol.DEFAULT_PORT;
/**
* id
*/
protected String id;
/**
* password
*/
protected String password = "";
/**
* 缺省用户名(redis不需要用户名验证,在这里只是作为密码加密的key)
*/
protected String username = "alogic";
/**
* 缺省的db
*/
protected int db = 0;
/**
* time out to get client
*/
protected int timeout = 30000;
protected String sdaId = "";
/**
* 加密的coder
*/
protected String coder = "Default";
public String getHost(){return host;}
public int getPort(){return port;}
protected int getDB(){return db;}
public String getId(){return id;}
protected String getIdOfMaxQueueLength() {
return "maxActive";
}
protected String getIdOfIdleQueueLength() {
return "maxIdle";
}
public Client getClient() {
return getClient(timeout);
}
public Client getClient(int timeout){
Client found = borrowObject(0, timeout);
if (found == null){
throw new RedisContextException("core.e1013","The pool is busy , can not get a client.");
}
return found;
}
public void recycle(Client client,boolean error){
returnObject(client,error);
}
public void recycle(Client client){
returnObject(client,false);
}
@SuppressWarnings("unchecked")
protected pooled createObject(){
Client instance = null;
try {
SecretDataArea sda = null;
if (StringUtils.isNotEmpty(sdaId)){
//从sda中装入信息
try {
sda = SDAFactory.getDefault().load(sdaId, true);
}catch (Exception ex){
logger.error("Can not find sda : " + sdaId);
logger.error(ExceptionUtils.getStackTrace(ex));
}
}
if (sda != null){
String pwd = sda.getField("password", password);
String ip = sda.getField("ip", host);
int p = sda.getField("port", port);
int index = sda.getField("db", db);
instance = new Client(ip,p,pwd,index);
instance.register(this);
}else{
String pwd = password;
if (StringUtils.isNotEmpty(coder)){
//通过coder进行密码解密
try {
Coder _coder = CoderFactory.newCoder(coder);
pwd = _coder.decode(password, username);
}catch (Exception ex){
logger.error("Can not find coder:" + coder);
}
}
instance = new Client(host,port,pwd,db);
instance.register(this);
}
}catch (Exception ex){
logger.error(String.format("Can not create a connection to redis %d:%d",host,port),ex);
}
return (pooled)instance;
}
public void configure(Element _e, Properties _properties) {
XmlElementProperties p = new XmlElementProperties(_e,_properties);
id = PropertiesConstants.getString(p, "id", "",true);
host = PropertiesConstants.getString(p,"host", "",true);
port = PropertiesConstants.getInt(p, "port", port,true);
password = PropertiesConstants.getString(p,"password","",true);
username = PropertiesConstants.getString(p,"username",username,true);
coder = PropertiesConstants.getString(p,"coder",coder,true);
sdaId = PropertiesConstants.getString(p,"sda", sdaId);
db = PropertiesConstants.getInt(p, "defaultDB", db,true);
timeout = PropertiesConstants.getInt(p,"timeout", timeout);
configure(p);
}
public void report(Element xml) {
if (xml != null){
xml.setAttribute("host", host);
xml.setAttribute("port", String.valueOf(port));
xml.setAttribute("defaultDB", String.valueOf(db));
super.report(xml);
}
}
public void report(Map json) {
if (json != null){
json.put("host", host);
json.put("port", port);
json.put("defaultDB", db);
super.report(json);
}
}
}