Spring Boot starter that provides auto-configuration and integration support for Alibaba Druid database connection pool and monitoring system.
—
The Druid Spring Boot Starter provides DataSource creation, configuration, and lifecycle management through wrapper classes and builder patterns.
A Spring Boot-integrated wrapper around DruidDataSource that provides automatic property binding and initialization.
/**
* Spring Boot wrapper for DruidDataSource with automatic configuration
* Extends DruidDataSource and implements InitializingBean for lifecycle management
*/
@ConfigurationProperties("spring.datasource.druid")
public class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
/**
* Initializes the DataSource after all properties are set
* Falls back to basic Spring Boot DataSource properties when Druid-specific properties are not set
* Calls DruidDataSource.init() to complete initialization
* @throws Exception if initialization fails
*/
void afterPropertiesSet() throws Exception;
/**
* Automatically registers available Druid filters with the DataSource
* @param filters List of Filter beans to be added to the DataSource
*/
@Autowired(required = false)
void autoAddFilters(List<Filter> filters);
/**
* Sets maximum evictable idle time with validation bypass
* Bypasses IllegalArgumentException for configuration order issues
* @param maxEvictableIdleTimeMillis Maximum idle time in milliseconds
*/
void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis);
}Key Features:
spring.datasource.druidUsage Example:
The wrapper is typically created automatically by the auto-configuration, but you can also create it manually:
@Bean
@ConfigurationProperties("spring.datasource.druid.primary")
public DruidDataSourceWrapper primaryDataSource() {
return new DruidDataSourceWrapper();
}Builder pattern utility for creating DruidDataSource instances, particularly useful for multiple DataSource configurations.
/**
* Builder utility for creating DruidDataSource instances
* Provides fluent API for DataSource creation
*/
public class DruidDataSourceBuilder {
/**
* Creates a new DruidDataSourceBuilder instance
* @return New builder instance
*/
static DruidDataSourceBuilder create();
/**
* Builds a new DruidDataSourceWrapper instance
* @return Configured DruidDataSourceWrapper ready for use
*/
DruidDataSource build();
/**
* @deprecated Legacy method for Spring Boot 1.x compatibility
* Builds DruidDataSource with environment-specific configuration
* Fixed property ordering issues in older Spring Boot versions
* @param env Spring Environment for property resolution
* @param prefix Configuration property prefix
* @return Configured DruidDataSource
*/
@Deprecated
DruidDataSource build(Environment env, String prefix);
}Usage Examples:
Single DataSource:
@Bean
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}Multiple DataSources:
@Configuration
public class MultiDataSourceConfig {
@Primary
@Bean
@ConfigurationProperties("spring.datasource.druid.primary")
public DataSource primaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.druid.secondary")
public DataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
}The DruidDataSourceWrapper follows a specific property resolution hierarchy:
spring.datasource.druid.username)spring.datasource.username) as fallback/**
* Property resolution order in afterPropertiesSet():
* 1. Check if Druid-specific property is set
* 2. If not, fall back to standard Spring Boot DataSource property
* 3. Apply the resolved value to the DruidDataSource
*/
void afterPropertiesSet() throws Exception {
if (super.getUsername() == null) {
super.setUsername(basicProperties.determineUsername());
}
if (super.getPassword() == null) {
super.setPassword(basicProperties.determinePassword());
}
// ... similar for URL and driver class name
init(); // Complete DruidDataSource initialization
}The wrapper automatically integrates with Druid's filter system:
/**
* Automatic filter registration
* Any Filter beans in the Spring context are automatically added to the DataSource
* Supports conditional filter registration based on configuration
*/
@Autowired(required = false)
public void autoAddFilters(List<Filter> filters) {
super.filters.addAll(filters);
}Supported Filter Types:
For applications requiring multiple DataSources, configure separate property prefixes:
Properties Configuration:
# Primary DataSource
spring.datasource.druid.primary.url=jdbc:mysql://localhost:3306/primary
spring.datasource.druid.primary.username=primary_user
spring.datasource.druid.primary.password=primary_pass
spring.datasource.druid.primary.initial-size=5
spring.datasource.druid.primary.max-active=20
# Secondary DataSource
spring.datasource.druid.secondary.url=jdbc:mysql://localhost:3306/secondary
spring.datasource.druid.secondary.username=secondary_user
spring.datasource.druid.secondary.password=secondary_pass
spring.datasource.druid.secondary.initial-size=3
spring.datasource.druid.secondary.max-active=10Java Configuration:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties("spring.datasource.druid.primary")
public DataSource primaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties("spring.datasource.druid.secondary")
public DataSource secondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
}The DruidDataSourceWrapper properly integrates with Spring's bean lifecycle:
Install with Tessl CLI
npx tessl i tessl/maven-com-alibaba--druid-spring-boot-starter