package com.jarvis.cache;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.AbandonedConfig;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
/**
* @author jiayu.qiu
*/
public class DataLoaderFactory extends BasePooledObjectFactory<DataLoader> {
private static volatile DataLoaderFactory instance;
private final GenericObjectPool<DataLoader> factory;
private DataLoaderFactory() {
GenericObjectPoolConfig config=new GenericObjectPoolConfig();
config.setMaxTotal(1024);
config.setMaxIdle(50);
config.setMinIdle(8);
config.setBlockWhenExhausted(false);// 当Pool中没有对象时不等待,而是直接new个新的
AbandonedConfig abandonConfig=new AbandonedConfig();
abandonConfig.setRemoveAbandonedTimeout(300);
abandonConfig.setRemoveAbandonedOnBorrow(true);
abandonConfig.setRemoveAbandonedOnMaintenance(true);
factory=new GenericObjectPool<DataLoader>(this, config, abandonConfig);
}
public static DataLoaderFactory getInstance() {
if(null == instance) {
synchronized(DataLoaderFactory.class) {
if(null == instance) {
instance=new DataLoaderFactory();
}
}
}
return instance;
}
public DataLoader getDataLoader() {
try {
return factory.borrowObject();
} catch(Exception e) {
e.printStackTrace();
}
return new DataLoader();
}
public void returnObject(DataLoader loader) {
factory.returnObject(loader);
}
@Override
public DataLoader create() throws Exception {
return new DataLoader();
}
@Override
public PooledObject<DataLoader> wrap(DataLoader obj) {
return new DefaultPooledObject<DataLoader>(obj);
}
}