net.ttddyy.dsproxy.QueryCountHolder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of datasource-proxy Show documentation
Show all versions of datasource-proxy Show documentation
Provide a datasource proxy that can inject your own logic into all queries.
package net.ttddyy.dsproxy;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* Hold QueryCount object by datasource name.
*
* @author Tadaya Tsuyukubo
* @see net.ttddyy.dsproxy.listener.QueryCountStrategy
*/
public class QueryCountHolder {
private static ThreadLocal> queryCountMapHolder = new ThreadLocal>() {
@Override
protected ConcurrentMap initialValue() {
return new ConcurrentHashMap();
}
};
public static QueryCount get(String dataSourceName) {
final Map map = queryCountMapHolder.get();
return map.get(dataSourceName);
}
public static QueryCount getGrandTotal() {
final QueryCount totalCount = new QueryCount();
final Map map = queryCountMapHolder.get();
for (QueryCount queryCount : map.values()) {
totalCount.setSelect(totalCount.getSelect() + queryCount.getSelect());
totalCount.setInsert(totalCount.getInsert() + queryCount.getInsert());
totalCount.setUpdate(totalCount.getUpdate() + queryCount.getUpdate());
totalCount.setDelete(totalCount.getDelete() + queryCount.getDelete());
totalCount.setOther(totalCount.getOther() + queryCount.getOther());
totalCount.setTotal(totalCount.getTotal() + queryCount.getTotal());
totalCount.setSuccess(totalCount.getSuccess() + queryCount.getSuccess());
totalCount.setFailure(totalCount.getFailure() + queryCount.getFailure());
totalCount.setTime(totalCount.getTime() + queryCount.getTime());
}
return totalCount;
}
public static void put(String dataSourceName, QueryCount count) {
queryCountMapHolder.get().put(dataSourceName, count);
}
public static List getDataSourceNamesAsList() {
return new ArrayList(getDataSourceNames());
}
public static Set getDataSourceNames() {
return queryCountMapHolder.get().keySet();
}
public static void clear() {
queryCountMapHolder.get().clear();
}
}