“Spring Boot 2 数据库场景的自动配置分析与整合测试”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) (→自动配置的类) |
||
| (未显示同一用户的16个中间版本) | |||
| 第10行: | 第10行: | ||
</dependency> | </dependency> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | [[文件:Spring-boot-starter-data-jdbc依赖包含 1.png|无|缩略图|540x540像素]]为什么没有数据库驱动? | ||
| + | |||
| + | 为什么导入 JDBC 场景,官方不导入驱动?官方不知道我们接下来要操作什么数据库。 | ||
| + | |||
| + | <syntaxhighlight lang="xml"> | ||
| + | <mysql.version>8.0.22</mysql.version> | ||
| + | |||
| + | <dependency> | ||
| + | <groupId>mysql</groupId> | ||
| + | <artifactId>mysql-connector-java</artifactId> | ||
| + | </dependency> | ||
| + | </syntaxhighlight>如果想要修改版本 | ||
| + | |||
| + | 直接依赖引入具体版本(Maven 的就近原则)<syntaxhighlight lang="xml"> | ||
| + | <dependency> | ||
| + | <groupId>mysql</groupId> | ||
| + | <artifactId>mysql-connector-java</artifactId> | ||
| + | <version>5.1.49</version> | ||
| + | </dependency> | ||
| + | </syntaxhighlight>或者重新声明版本(Maven 的属性的就近优先原则)<syntaxhighlight lang="xml"> | ||
| + | <properties> | ||
| + | <mysql.version>5.1.49</mysql.version> | ||
| + | </properties> | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | === 分析自动配置 === | ||
| + | [[文件:Data-jdbc自动配置分析1.png|无|缩略图|740x740像素]] | ||
| + | [[文件:Data-jdbc自动配置分析2.png|无|缩略图|376x376像素]] | ||
| + | |||
| + | ==== 自动配置的类 ==== | ||
| + | |||
| + | * DataSourceAutoConfiguration:数据源的自动配置 | ||
| + | **修改数据源相关的配置:spring.datasource[[文件:修改数据源相关的配置1.png|无|缩略图|590x590像素]][[文件:修改数据源相关的配置2.png|无|缩略图|706x706像素]] | ||
| + | **数据库连接池的配置,是自己容器中没有 DataSource 的 bean 才自动配置的<syntaxhighlight lang="java"> | ||
| + | @Configuration(proxyBeanMethods = false) | ||
| + | @Conditional(PooledDataSourceCondition.class) | ||
| + | @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) | ||
| + | @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, | ||
| + | DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class, | ||
| + | DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class }) | ||
| + | protected static class PooledDataSourceConfiguration { | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight><syntaxhighlight lang="java"> | ||
| + | /** | ||
| + | * Hikari DataSource configuration. | ||
| + | */ | ||
| + | @Configuration(proxyBeanMethods = false) | ||
| + | @ConditionalOnClass(HikariDataSource.class) | ||
| + | @ConditionalOnMissingBean(DataSource.class) | ||
| + | @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", | ||
| + | matchIfMissing = true) | ||
| + | static class Hikari { | ||
| + | |||
| + | @Bean | ||
| + | @ConfigurationProperties(prefix = "spring.datasource.hikari") | ||
| + | HikariDataSource dataSource(DataSourceProperties properties) { | ||
| + | HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class); | ||
| + | if (StringUtils.hasText(properties.getName())) { | ||
| + | dataSource.setPoolName(properties.getName()); | ||
| + | } | ||
| + | return dataSource; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | **底层配置好的连接池是:HikariDataSource | ||
| + | *DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置 | ||
| + | *JdbcTemplateAutoConfiguration:JdbcTemplate 的自动配置,可以用来对数据库进行 CRUD | ||
| + | *JndiDataSourceAutoConfiguration:JNDI 的自动配置 | ||
| + | *XADataSourceAutoConfiguration:分布式事务的相关配置 | ||
2023年1月30日 (一) 10:11的最新版本
https://www.bilibili.com/video/BV19K4y1L7MT?p=60
数据源的自动配置
导入JDBC场景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
为什么没有数据库驱动?
为什么导入 JDBC 场景,官方不导入驱动?官方不知道我们接下来要操作什么数据库。
<mysql.version>8.0.22</mysql.version>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
如果想要修改版本 直接依赖引入具体版本(Maven 的就近原则)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
或者重新声明版本(Maven 的属性的就近优先原则)
<properties>
<mysql.version>5.1.49</mysql.version>
</properties>
分析自动配置
自动配置的类
- DataSourceAutoConfiguration:数据源的自动配置
- 修改数据源相关的配置:spring.datasource
- 数据库连接池的配置,是自己容器中没有 DataSource 的 bean 才自动配置的
@Configuration(proxyBeanMethods = false) @Conditional(PooledDataSourceCondition.class) @ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class, DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class }) protected static class PooledDataSourceConfiguration { }
/** * Hikari DataSource configuration. */ @Configuration(proxyBeanMethods = false) @ConditionalOnClass(HikariDataSource.class) @ConditionalOnMissingBean(DataSource.class) @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true) static class Hikari { @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") HikariDataSource dataSource(DataSourceProperties properties) { HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; } }
- 底层配置好的连接池是:HikariDataSource
- DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置
- JdbcTemplateAutoConfiguration:JdbcTemplate 的自动配置,可以用来对数据库进行 CRUD
- JndiDataSourceAutoConfiguration:JNDI 的自动配置
- XADataSourceAutoConfiguration:分布式事务的相关配置



