import java.lang.reflect.Type;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import com.google.gson.Gson;
public class JsonPoolUtils {
private static ThreadLocal<JsonPoolUtils> instance = new ThreadLocal<JsonPoolUtils>();
protected static GenericObjectPool<Gson> pool;
static {
if (instance.get() == null || pool == null) {
GenericObjectPoolConfig conf = new GenericObjectPoolConfig();
conf.setMaxTotal(32);
conf.setMaxIdle(4);
pool = new GenericObjectPool<Gson>(new PooledGsonFactory(), conf);
}
}
public final static <T> T fromJson(String json, Type typeOfT) {
if (json == null) {
return null;
}
Gson gson = null;
try {
gson = pool.borrowObject();
} catch (Exception e) {
e.printStackTrace();
}
T t = gson.fromJson(json, typeOfT);
pool.returnObject(gson);
return t;
}
public final static String toJson(Object src) {
if (src == null) {
return null;
}
Gson gson = null;
try {
gson = pool.borrowObject();
} catch (Exception e) {
e.printStackTrace();
}
String string = gson.toJson(src);
pool.returnObject(gson);
return string;
}
}
import java.sql.Timestamp;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class PooledGsonFactory extends BasePooledObjectFactory<Gson> {
@Override
public Gson create() throws Exception {
return new GsonBuilder().registerTypeAdapter(Timestamp.class, new TimestampTypeAdapter()).create();
}
@Override
public PooledObject<Gson> wrap(Gson obj) {
return new DefaultPooledObject<Gson>(obj);
}
}