0
# Auto-Configuration
1
2
The Druid Spring Boot Starter provides automatic configuration for Druid DataSource integration through Spring Boot's auto-configuration mechanism.
3
4
## Capabilities
5
6
### DruidDataSourceAutoConfigure
7
8
Main auto-configuration class that conditionally creates and configures Druid DataSource beans when appropriate conditions are met.
9
10
```java { .api }
11
/**
12
* Auto-configuration for Druid DataSource integration
13
* Conditionally creates DruidDataSourceWrapper when:
14
* - spring.datasource.type is set to DruidDataSource or not specified
15
* - DruidDataSource class is available on classpath
16
* - No existing DataSource beans are present
17
*/
18
@Configuration
19
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)
20
@ConditionalOnClass(DruidDataSource.class)
21
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
22
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
23
@Import({DruidSpringAopConfiguration.class, DruidStatViewServletConfiguration.class, DruidWebStatFilterConfiguration.class, DruidFilterConfiguration.class})
24
public class DruidDataSourceAutoConfigure {
25
26
/**
27
* Creates the primary DruidDataSourceWrapper bean when no other DataSource beans exist
28
* @return DruidDataSourceWrapper configured with Spring Boot properties
29
*/
30
@Bean
31
@ConditionalOnMissingBean({DruidDataSourceWrapper.class, DruidDataSource.class, DataSource.class})
32
public DruidDataSourceWrapper dataSource();
33
}
34
```
35
36
**Key Features:**
37
38
- **Conditional Activation**: Only activates when `spring.datasource.type` is set to Druid or not specified
39
- **Class Path Detection**: Requires DruidDataSource class to be available
40
- **Bean Conflict Prevention**: Won't create DataSource if one already exists
41
- **Property Integration**: Automatically binds `DruidStatProperties` and `DataSourceProperties`
42
- **Component Import**: Imports all related configuration classes for monitoring, AOP, and filters
43
44
**Usage Example:**
45
46
The auto-configuration activates automatically when you add the starter dependency. To ensure it activates, either:
47
48
1. Don't specify `spring.datasource.type` (it will default to Druid)
49
2. Explicitly set it:
50
51
```properties
52
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
53
```
54
55
### Configuration Properties Integration
56
57
The auto-configuration enables two main property classes:
58
59
```java { .api }
60
/**
61
* Standard Spring Boot DataSource properties
62
* Used as fallback when Druid-specific properties are not set
63
*/
64
@EnableConfigurationProperties(DataSourceProperties.class)
65
66
/**
67
* Druid-specific configuration properties
68
* Takes precedence over standard DataSource properties
69
*/
70
@EnableConfigurationProperties(DruidStatProperties.class)
71
```
72
73
### Component Import Strategy
74
75
The auto-configuration uses `@Import` to conditionally include related configuration:
76
77
```java { .api }
78
@Import({
79
DruidSpringAopConfiguration.class, // AOP monitoring integration
80
DruidStatViewServletConfiguration.class, // Web monitoring console
81
DruidWebStatFilterConfiguration.class, // Web statistics filter
82
DruidFilterConfiguration.class // Various Druid filters
83
})
84
```
85
86
Each imported configuration class has its own conditional logic, so they only activate when their specific conditions are met.
87
88
### Auto-Configuration Ordering
89
90
The configuration is explicitly ordered to run before Spring Boot's default DataSource auto-configuration:
91
92
```java { .api }
93
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
94
```
95
96
This ensures that if Druid conditions are met, the Druid DataSource will be created instead of Spring Boot's default DataSource.
97
98
### Conditional Logic Summary
99
100
The auto-configuration will create a DruidDataSourceWrapper bean when ALL of the following conditions are true:
101
102
1. **Property Condition**: `spring.datasource.type` is either unset or set to `com.alibaba.druid.pool.DruidDataSource`
103
2. **Class Condition**: `DruidDataSource.class` is available on the classpath
104
3. **Bean Condition**: No existing beans of type `DruidDataSourceWrapper`, `DruidDataSource`, or `DataSource` are present
105
106
**Configuration Override:**
107
108
If you need to disable the auto-configuration entirely, you can exclude it:
109
110
```java
111
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
112
public class Application {
113
// ...
114
}
115
```
116
117
Or in `application.properties`:
118
119
```properties
120
spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
121
```