官网原话:
Production database connections can also be auto-configured by using a pooling DataSource
. Spring Boot uses the following algorithm for choosing a specific implementation:
- We prefer HikariCP for its performance and concurrency. If HikariCP is available, we always choose it.
- Otherwise, if the Tomcat pooling
DataSource
is available, we use it. - If neither HikariCP nor the Tomcat pooling datasource are available and if Commons DBCP2 is available, we use it.
If you use the spring-boot-starter-jdbc
or spring-boot-starter-data-jpa
“starters”, you automatically get a dependency to HikariCP
.
在获取数据库连接时,可以通过使用数据源连接池来自动获取。
SpringBoot自动配置的连接池的顺序:
- HikariCP
- Tomcat pooling
- DBCP2
同样可以直接使用starters
来配置
源码解释
我们这里使用的springBoot 2.3.4
版本
springboot中JDBC的自动配置类是DataSourceHealthContributorAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({
JdbcTemplate.class, AbstractRoutingDataSource.class })
@ConditionalOnBean(DataSource.class)
@ConditionalOnEnabledHealthIndicator("db")
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class DataSourceHealthContributorAutoConfiguration extends
CompositeHealthContributorConfiguration<AbstractHealthIndicator, DataSource> implements InitializingBean {
DataSourceAutoConfiguration
包含有数据源的自动配置
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({
DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({
DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {
@Configuration(proxyBeanMethods = false)
@Conditional(EmbeddedDatabaseCondition.class)
@ConditionalOnMissingBean({
DataSource.class, XADataSource.class })
@Import(EmbeddedDataSourceConfiguration.class)
protected