mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved init performance.
This commit is contained in:
@@ -150,6 +150,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
private boolean asyncInit = false;
|
||||
protected boolean killWhenSocketReadTimeout = false;
|
||||
|
||||
private static List<Filter> autoFilters = null;
|
||||
private boolean loadSpifilterSkip = false;
|
||||
|
||||
protected static final AtomicLongFieldUpdater<DruidDataSource> recycleErrorCountUpdater
|
||||
= AtomicLongFieldUpdater.newUpdater(DruidDataSource.class, "recycleErrorCount");
|
||||
protected static final AtomicLongFieldUpdater<DruidDataSource> connectErrorCountUpdater
|
||||
@@ -157,6 +160,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
protected static final AtomicLongFieldUpdater<DruidDataSource> resetCountUpdater
|
||||
= AtomicLongFieldUpdater.newUpdater(DruidDataSource.class, "resetCount");
|
||||
|
||||
|
||||
public DruidDataSource(){
|
||||
this(false);
|
||||
}
|
||||
@@ -480,6 +484,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
String property = System.getProperty("druid.load.spifilter.skip");
|
||||
if (property != null && !"false".equals(property)) {
|
||||
loadSpifilterSkip = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isKillWhenSocketReadTimeout() {
|
||||
@@ -1008,22 +1018,28 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
* @see ServiceLoader
|
||||
*/
|
||||
private void initFromSPIServiceLoader() {
|
||||
|
||||
String property = System.getProperty("druid.load.spifilter.skip");
|
||||
if (property != null) {
|
||||
if (loadSpifilterSkip) {
|
||||
return;
|
||||
}
|
||||
|
||||
ServiceLoader<Filter> druidAutoFilterLoader = ServiceLoader.load(Filter.class);
|
||||
if (autoFilters == null) {
|
||||
List<Filter> filters = new ArrayList<Filter>();
|
||||
ServiceLoader<Filter> autoFilterLoader = ServiceLoader.load(Filter.class);
|
||||
|
||||
for (Filter autoFilter : druidAutoFilterLoader) {
|
||||
AutoLoad autoLoad = autoFilter.getClass().getAnnotation(AutoLoad.class);
|
||||
if (autoLoad != null && autoLoad.value()) {
|
||||
if (LOG.isInfoEnabled()) {
|
||||
LOG.info("load filter from spi :" + autoFilter.getClass().getName());
|
||||
for (Filter filter : autoFilterLoader) {
|
||||
AutoLoad autoLoad = filter.getClass().getAnnotation(AutoLoad.class);
|
||||
if (autoLoad != null && autoLoad.value()) {
|
||||
filters.add(filter);
|
||||
}
|
||||
addFilter(autoFilter);
|
||||
}
|
||||
autoFilters = filters;
|
||||
}
|
||||
|
||||
for (Filter filter : autoFilters) {
|
||||
if (LOG.isInfoEnabled()) {
|
||||
LOG.info("load filter from spi :" + filter.getClass().getName());
|
||||
}
|
||||
addFilter(filter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user