基于数据库的Java应用涉及两个概念,一个是使用哪种数据库(Database),比如:Oracle、MySQL和嵌入式数据库(比如:h2/derby/hsql)等,另一个是使用哪种数据源(DataSource,也即数据库连接池(connection pool)),比如:tomcat数据源/Hikari/DBCP1/DBCP2/SimpleDriverDataSource等,数据库和数据源可以任意搭配。
spring boot自动配置支持多种数据源(DataSourceAutoConfiguration),比如:Tomcat数据源/Hikari/DBCP1/DBCP2连接池和SimpleDriverDataSource,根据相应class(DataSourcePoolMetadataProvidersConfiguration)或spring.datasource.type(DataSourceProperties)属性的取值来判断,可取值包括如下:
- org.apache.tomcat.jdbc.pool.DataSource
- com.zaxxer.hikari.HikariDataSource
- org.apache.commons.dbcp.BasicDataSource
- org.apache.commons.dbcp2.BasicDataSource
嵌入式数据库数据源默认使用嵌入式数据库(EmbeddedDatabase)和SimpleDriverDataSource数据源(spring-jdbc提供),比其他数据源优先级低。
spring boot 1.x 默认数据源是tomcat数据源,spring boot 2.x 默认数据源是Hikari
通用配置
配置类:org.springframework.boot.autoconfigure.jdbc.DataSourceProperties,配置前缀:spring.datasource
1 |
|
可以不用指定驱动名称,spring boot会自动根据url识别。
如果url也不指定,则根据已加载的驱动识别使用嵌入式数据库(EmbeddedDatabaseConnection)。
1 |
|
具体数据源的定义以及相关配置由org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration实现。
Tomcat数据源
spring-boot-starter-data-jpa和spring-boot-starter-jdbc默认使用Tomcat数据源
1 |
|
配置类:org.apache.tomcat.jdbc.pool.DataSource
DBCP2数据源
替换为DBCP2
1 |
|
配置类:org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Dbcp2,配置前缀:spring.datasource.dbcp2,例如:
1 |
|
嵌入式数据库数据源
1 |
|
org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration
配置类:SimpleDriverDataSource和EmbeddedDatabaseBuilder
默认HSQL,默认脚本schema.sql和data.sql
1 |
|
测试数据库自动配置
针对一次性测试的数据库需求,spring boot提供了特定支持,自动配置类为TestDatabaseAutoConfiguration。
1 |
|
开发测试时嵌入式数据库可能还不错,spring-boot的支持也相当给力,可以不用做任何配置。
对于生产等环境,需要使用独立的数据库服务器,则可以通过配置即可实现。