如果什么都不设置,默认的数据源是hikari连接池。
过程
DataSourceAutoConfiguration 自动装配类
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {}
@EnableConfigurationProperties(DataSourceProperties.class) 表示支持属性配置
如果没有其他数据源,就使用嵌入数据源
@Configuration
@Conditional(EmbeddedDatabaseCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import(EmbeddedDataSourceConfiguration.class)
protected static class EmbeddedDatabaseConfiguration {
}
在找不到数据源的时候,依次导入数据源
@Configuration
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class,
DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration {
}
@ConditionalOnMissingBean 这个注解真是666,当找不到数据源时,默认依次使用hikari,tomcat,dbcp2,jmx。
starter里面有什么内容
以spring-boot-starter-web-2.1.7.RELEASE为例,starter里面只有一个MANIFEST.MF:
Manifest-Version: 1.0
Implementation-Title: Spring Boot Web Starter
Automatic-Module-Name: spring.boot.starter.web
Implementation-Version: 2.1.7.RELEASE
Built-By: Spring
Build-Jdk-Spec: 1.8
Created-By: Maven Archiver 3.4.0
他的作用就是引入其他依赖,例如这里是通过
Automatic-Module-Name:
引入spring.boot.starter.web
如何查看是否用的hikari连接池
idea启动界面console的第一行看,无论如何都没有druid字样,只有hikari,这是为什么呢?
排除dataSource的自动加载
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})