理解数据源自动配置
数据源核心依赖就是spring‐boot‐starter‐jdbc
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
或者使用的是JPA:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Mysql数据库连接信息:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/world?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC driverClassName: com.mysql.cj.jdbc.Driver username: admin password: admin
查明当前数据源
@RunWith(SpringRunner.class) @SpringBootTest public class BootMybatisApplicationTests { @Autowired private DataSource dataSource; @Test public void contextLoads() { System.out.println(dataSource.getClass()); } }
输出: class org.apache.tomcat.jdbc.pool.DataSource
默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源
数据源的相关配置都在DataSourceProperties里面:
2.自动配置原理
org.springframework.boot.autoconfigure.jdbc包下的DataSourceConfiguration类
/** * Tomcat Pool DataSource configuration. */ @ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class) @ConditionalOnMissingBean(DataSource.class) @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true) static class Tomcat { @Bean @ConfigurationProperties(prefix = "spring.datasource.tomcat") public org.apache.tomcat.jdbc.pool.DataSource dataSource( DataSourceProperties properties) { org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource( properties, org.apache.tomcat.jdbc.pool.DataSource.class); DatabaseDriver databaseDriver = DatabaseDriver .fromJdbcUrl(properties.determineUrl()); String validationQuery = databaseDriver.getValidationQuery(); if (validationQuery != null) { dataSource.setTestOnBorrow(true); dataSource.setValidationQuery(validationQuery); } return dataSource; } }
如果在classpath下存在org.apache.tomcat.jdbc.pool.DataSource.class类,并且在配置文件中指定spring.datasource.type的值为org.apache.tomcat.jdbc.pool.DataSource,或者不写都会认为可以通过。只有通过才会进入这段配置代码,才能注入DataSourceBean。
SpringBoot默认可以支持;
org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource
立志如山 静心求实
浙公网安备 33010602011771号