A high-performance JDBC connection pool and database monitoring library with SQL parsing and security features
npx @tessl/cli install tessl/maven-com-alibaba--druid@1.2.0Druid is a high-performance JDBC connection pool and database monitoring library developed by Alibaba. It provides comprehensive database connectivity with built-in monitoring, SQL parsing, security features, and support for 50+ database types including MySQL, PostgreSQL, Oracle, SQL Server, and many others.
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.25</version>
</dependency>// DataSource and connection pooling
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidDataSourceStatManager;
import com.alibaba.druid.pool.DruidPooledConnection;
// SQL parsing and processing
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.SQLUtils.FormatOption;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.parser.SQLParserFeature;
import com.alibaba.druid.DbType;
// Security and filtering
import com.alibaba.druid.wall.WallFilter;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.filter.Filter;
// Statistics and monitoring
import com.alibaba.druid.stat.DruidStatService;
import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcDataSourceStat;
// Common exceptions
import com.alibaba.druid.pool.GetConnectionTimeoutException;
import com.alibaba.druid.pool.DataSourceClosedException;
import com.alibaba.druid.wall.WallSQLException;
import com.alibaba.druid.sql.parser.ParserException;import com.alibaba.druid.pool.DruidDataSource;
import java.sql.Connection;
import java.sql.SQLException;
// Create and configure DataSource
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
// Configure connection pool
dataSource.setInitialSize(5);
dataSource.setMaxActive(10);
dataSource.setMinIdle(5);
dataSource.setMaxWait(60000);
// Get connection from pool
try (Connection conn = dataSource.getConnection()) {
// Use connection for database operations
System.out.println("Connected to database: " + conn.getMetaData().getDatabaseProductName());
} catch (SQLException e) {
e.printStackTrace();
}
// Close DataSource when done
dataSource.close();Druid is organized into several key components:
Core functionality for creating and managing JDBC connection pools with extensive configuration options.
// Main DataSource implementation
class DruidDataSource extends DruidAbstractDataSource implements DataSource, DataSourceProxy, Serializable {
public DruidDataSource();
public DruidDataSource(boolean fairLock);
// Configuration methods
public void setUrl(String jdbcUrl);
public void setUsername(String username);
public void setPassword(String password);
public void setDriverClassName(String driverClassName);
public void setInitialSize(int initialSize);
public void setMaxActive(int maxActive);
public void setMinIdle(int minIdle);
public void setMaxWait(long maxWaitMillis);
// Connection management
public Connection getConnection() throws SQLException;
public Connection getConnection(String username, String password) throws SQLException;
public void close();
}
// Factory for creating DataSource from Properties
class DruidDataSourceFactory {
public static DataSource createDataSource(Properties properties) throws Exception;
public static DataSource createDataSource(Map<String, Object> properties) throws Exception;
}Comprehensive SQL parsing engine supporting multiple database dialects with AST manipulation capabilities.
// Primary SQL utilities
class SQLUtils {
// Parsing methods
public static List<SQLStatement> parseStatements(String sql, String dbType, SQLParserFeature... features);
public static SQLStatement parseSingleStatement(String sql, String dbType, SQLParserFeature... features);
public static SQLStatement parseSingleStatement(String sql, String dbType, boolean keepComments);
// Formatting methods
public static String format(String sql, String dbType);
public static String format(String sql, String dbType, SQLUtils.FormatOption... options);
public static String toSQLString(SQLObject sqlObject, String dbType);
// Validation methods
public static boolean isValidName(String name);
}
// Database type enumeration supporting 50+ database types
enum DbType {
// Major relational databases
mysql, mariadb, oracle, postgresql, sqlserver,
// Cloud and big data platforms
clickhouse, presto, hive, spark, snowflake, bigquery,
// Other databases
h2, db2, sqlite, derby, hsqldb,
// Specialized databases
oceanbase_oracle, polardb, tidb, drds,
// ... and 30+ more database types
}Advanced security filtering system with SQL injection protection and configurable security policies.
// Main security filter
class WallFilter extends FilterEventAdapter implements Filter {
public WallFilter();
public WallFilter(WallProvider provider);
public void setConfig(WallConfig config);
public WallConfig getConfig();
public void setDbType(String dbType);
}
// Security configuration
class WallConfig {
public WallConfig();
public WallConfig(String dbType);
public void setSelectAllow(boolean selectAllow);
public void setDeleteAllow(boolean deleteAllow);
public void setUpdateAllow(boolean updateAllow);
public void setInsertAllow(boolean insertAllow);
public void setMultiStatementAllow(boolean multiStatementAllow);
}Real-time performance monitoring and statistics collection for database operations.
// Main statistics service
class DruidStatService {
public static DruidStatService getInstance();
public Object getDataSourceStatDataList();
public Object getSqlStatDataList(Integer dataSourceId);
public Object getActiveConnectionStackTraceList();
public void resetAll();
public void logAndResetDataSource();
}
// DataSource statistics management
class DruidDataSourceStatManager {
public static DruidDataSourceStatManager getInstance();
public Set<DruidDataSourceStatValue> getDataSourceList();
public DruidDataSourceStatValue getDataSourceStatValue(Integer identity);
}// Connection pool exceptions
class GetConnectionTimeoutException extends SQLException {
public GetConnectionTimeoutException(String message);
public GetConnectionTimeoutException(String message, Throwable cause);
}
class DataSourceClosedException extends SQLException {
public DataSourceClosedException(String message);
}
// Security exceptions
class WallSQLException extends SQLException {
public WallSQLException(String message);
public WallSQLException(String message, Throwable cause);
}
// SQL processing exceptions
class ParserException extends RuntimeException {
public ParserException(String message);
public ParserException(String message, Throwable cause);
public int getLine();
public int getColumn();
}
class SQLParseException extends ParserException {
public SQLParseException(String message);
public SQLParseException(String message, Throwable cause);
}
// Core runtime exceptions
class DruidRuntimeException extends RuntimeException {
public DruidRuntimeException(String message);
public DruidRuntimeException(String message, Throwable cause);
}
class FastsqlException extends RuntimeException {
public FastsqlException(String message);
public FastsqlException(String message, Throwable cause);
}Druid supports 50+ database types with dialect-specific parsing and features:
Druid provides integration support for popular Java frameworks: