Search in sources :

Example 1 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidDataSource method initFromSPIServiceLoader.

/**
     * load filters from SPI ServiceLoader
     * 
     * @see ServiceLoader
     */
private void initFromSPIServiceLoader() {
    String property = System.getProperty("druid.load.spifilter.skip");
    if (property != null) {
        return;
    }
    ServiceLoader<Filter> druidAutoFilterLoader = 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());
            }
            addFilter(autoFilter);
        }
    }
}
Also used : WallFilter(com.alibaba.druid.wall.WallFilter) Filter(com.alibaba.druid.filter.Filter) AutoLoad(com.alibaba.druid.filter.AutoLoad)

Example 2 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidDataSource method close.

/**
     * close datasource
     */
public void close() {
    lock.lock();
    try {
        if (this.closed) {
            return;
        }
        if (!this.inited) {
            return;
        }
        if (logStatsThread != null) {
            logStatsThread.interrupt();
        }
        if (createConnectionThread != null) {
            createConnectionThread.interrupt();
        }
        if (destroyConnectionThread != null) {
            destroyConnectionThread.interrupt();
        }
        if (destroySchedulerFuture != null) {
            destroySchedulerFuture.cancel(true);
        }
        for (int i = 0; i < poolingCount; ++i) {
            DruidConnectionHolder connHolder = connections[i];
            for (PreparedStatementHolder stmtHolder : connHolder.getStatementPool().getMap().values()) {
                connHolder.getStatementPool().closeRemovedStatement(stmtHolder);
            }
            connHolder.getStatementPool().getMap().clear();
            Connection physicalConnection = connHolder.getConnection();
            try {
                physicalConnection.close();
            } catch (Exception ex) {
                LOG.warn("close connection error", ex);
            }
            connections[i] = null;
            destroyCount.incrementAndGet();
        }
        poolingCount = 0;
        unregisterMbean();
        enable = false;
        notEmpty.signalAll();
        notEmptySignalCount++;
        this.closed = true;
        this.closeTimeMillis = System.currentTimeMillis();
        for (Filter filter : filters) {
            filter.destroy();
        }
    } finally {
        lock.unlock();
    }
    if (LOG.isInfoEnabled()) {
        LOG.info("{dataSource-" + this.getID() + "} closed");
    }
}
Also used : WallFilter(com.alibaba.druid.wall.WallFilter) Filter(com.alibaba.druid.filter.Filter) Connection(java.sql.Connection) PooledConnection(javax.sql.PooledConnection) NamingException(javax.naming.NamingException) JMException(javax.management.JMException) ConcurrentModificationException(java.util.ConcurrentModificationException) TransactionTimeoutException(com.alibaba.druid.TransactionTimeoutException) SQLException(java.sql.SQLException)

Example 3 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DataSourceProxyImpl method getFilterClasses.

@Override
public String[] getFilterClasses() {
    List<Filter> filterConfigList = config.getFilters();
    List<String> classes = new ArrayList<String>();
    for (Filter filter : filterConfigList) {
        classes.add(filter.getClass().getName());
    }
    return classes.toArray(new String[classes.size()]);
}
Also used : Filter(com.alibaba.druid.filter.Filter) ArrayList(java.util.ArrayList)

Example 4 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class DruidDriver method getDataSource.

/**
     * 参数定义: com.alibaba.druid.log.LogFilter=filter com.alibaba.druid.log.LogFilter.p1=prop-value
     * com.alibaba.druid.log.LogFilter.p2=prop-value
     * 
     * @param url
     * @return
     * @throws SQLException
     */
private DataSourceProxyImpl getDataSource(String url, Properties info) throws SQLException {
    DataSourceProxyImpl dataSource = proxyDataSources.get(url);
    if (dataSource == null) {
        DataSourceProxyConfig config = parseConfig(url, info);
        Driver rawDriver = createDriver(config.getRawDriverClassName());
        DataSourceProxyImpl newDataSource = new DataSourceProxyImpl(rawDriver, config);
        {
            String property = System.getProperty("druid.filters");
            if (property != null && property.length() > 0) {
                for (String filterItem : property.split(",")) {
                    FilterManager.loadFilter(config.getFilters(), filterItem);
                }
            }
        }
        {
            int dataSourceId = createDataSourceId();
            newDataSource.setId(dataSourceId);
            for (Filter filter : config.getFilters()) {
                filter.init(newDataSource);
            }
        }
        DataSourceProxy oldDataSource = proxyDataSources.putIfAbsent(url, newDataSource);
        if (oldDataSource == null) {
            if (config.isJmxOption()) {
                JMXUtils.register("com.alibaba.druid:type=JdbcStat", JdbcStatManager.getInstance());
            }
        }
        dataSource = proxyDataSources.get(url);
    }
    return dataSource;
}
Also used : DataSourceProxyConfig(com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig) DataSourceProxyImpl(com.alibaba.druid.proxy.jdbc.DataSourceProxyImpl) DataSourceProxy(com.alibaba.druid.proxy.jdbc.DataSourceProxy) Filter(com.alibaba.druid.filter.Filter) Driver(java.sql.Driver)

Example 5 with Filter

use of com.alibaba.druid.filter.Filter in project druid by alibaba.

the class WallFilterTest3 method setUp.

protected void setUp() throws Exception {
    dataSource = new DruidDataSource();
    dataSource.setUrl("jdbc:h2:mem:wall_test;");
    // dataSource.setFilters("wall");
    dataSource.setDbType(JdbcConstants.MARIADB);
    WallConfig config = new WallConfig();
    config.setTenantCallBack(new TenantTestCallBack());
    wallFilter = new WallFilter();
    wallFilter.setConfig(config);
    wallFilter.setDbType(JdbcConstants.MARIADB);
    List<Filter> filters = new LinkedList<Filter>();
    filters.add(wallFilter);
    dataSource.setProxyFilters(filters);
    dataSource.init();
}
Also used : WallFilter(com.alibaba.druid.wall.WallFilter) WallFilter(com.alibaba.druid.wall.WallFilter) Filter(com.alibaba.druid.filter.Filter) WallConfig(com.alibaba.druid.wall.WallConfig) DruidDataSource(com.alibaba.druid.pool.DruidDataSource) LinkedList(java.util.LinkedList)

Aggregations

Filter (com.alibaba.druid.filter.Filter)16 WallFilter (com.alibaba.druid.wall.WallFilter)7 SQLException (java.sql.SQLException)4 ArrayList (java.util.ArrayList)3 FilterChainImpl (com.alibaba.druid.filter.FilterChainImpl)2 DruidDataSource (com.alibaba.druid.pool.DruidDataSource)2 DataSourceProxyConfig (com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig)2 ConnectionEvent (javax.sql.ConnectionEvent)2 ConnectionEventListener (javax.sql.ConnectionEventListener)2 TransactionTimeoutException (com.alibaba.druid.TransactionTimeoutException)1 AutoLoad (com.alibaba.druid.filter.AutoLoad)1 FilterAdapter (com.alibaba.druid.filter.FilterAdapter)1 FilterChain (com.alibaba.druid.filter.FilterChain)1 MockDriver (com.alibaba.druid.mock.MockDriver)1 ConnectionProxy (com.alibaba.druid.proxy.jdbc.ConnectionProxy)1 DataSourceProxy (com.alibaba.druid.proxy.jdbc.DataSourceProxy)1 DataSourceProxyImpl (com.alibaba.druid.proxy.jdbc.DataSourceProxyImpl)1 JdbcDataSourceStat (com.alibaba.druid.stat.JdbcDataSourceStat)1 WallConfig (com.alibaba.druid.wall.WallConfig)1 Connection (java.sql.Connection)1