数据源自动配置(DataSourceAutoConfiguration)
1. 数据源自动配置支持功能一览
- 嵌入式数据库支持,支持 H2, Derby,HSQL 等嵌入式数据库;
- 支持 Hikari, Tomcat, DBCP2, Generic 等多种数据库连接池配置;Hikari是默认的数据库连接池,号称是Java平台最快的。
- 通过执行脚本初始化数据源;
- 数据库连接池Metadata Provider支持;
2. 配置H2嵌入式数据库
2.1 添加H2数据库依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
2.2 配置H2数据库
spring:
h2:
console:
# 控制台访问路径
path: /h2-console
# 是否启用控制台
enabled: true
# 是否允许远程访问
settings:
web-allow-others: true
2.3 数据源配置
spring:
datasource:
# 嵌入式数据库连接方式
embeddedDatabaseConnection: EmbeddedDatabaseConnection.H2
# 数据库名称
name: sbia_demo
# schema脚本
schema: classpath:sbia_demo_schema.sql
# 数据脚本
data: classpath:sbia_demo_data.sql
# 连接池类型
type: com.zaxxer.hikari.HikariDataSource
2.4 Hikari连接池配置
spring:
hikari: ## Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
minimum-idle: 5
## 空闲连接存活最大时间,默认600000(10分钟)
idle-timeout: 180000
## 连接池最大连接数,默认是10
maximum-pool-size: 10
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
auto-commit: true
## 连接池名字
pool-name: MyHikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
max-lifetime: 1800000
## 数据库连接超时时间,默认30秒,即30000
connection-timeout: 30000
connection-test-query: SELECT 1
2.5 数据源预置Schema和数据信息
schema
CREATE TABLE `demo_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` varchar(20) NOT NULL DEFAULT '' COMMENT '编码',
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '名字',
`birthday` date NOT NULL COMMENT '生日',
`sex` tinyint(4) NOT NULL COMMENT '性别',
`demo` varchar(100) DEFAULT NULL COMMENT '备注',
`create_user` varchar(20) NOT NULL DEFAULT '' COMMENT '创建用户',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user` varchar(20) DEFAULT NULL COMMENT '更新用户',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
`dr` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识位。0:未删除;1:已删除',
PRIMARY KEY (`id`)
);
data
INSERT INTO `demo_user` (`id`, `code`, `name`, `birthday`, `sex`, `demo`, `create_user`, `create_time`, `update_user`, `update_time`, `ts`, `dr`)
VALUES
(1,'zhangsan','张三','1983-01-01',1,NULL,'system','2019-08-08 00:00:00','system','2019-08-08 00:00:00','2019-08-14 16:28:32',0),
(8,'lisi','李四','1984-01-01',1,NULL,'system','2019-08-08 00:00:00','system','2019-08-08 00:00:00','2019-08-14 16:29:30',0),
(9,'wangermazi','王二麻子','1985-01-01',1,NULL,'system','2019-08-08 00:00:00','system','2019-08-08 00:00:00','2019-08-14 16:29:47',0);
3. H2控制台
3.1 访问H2控制台
访问URL: http://localhost:8080/h2-console
JDBC URL: jdbc:h2:mem:sbia_demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
3.2 查看预置数据
可以看到预置的DEMO_USER表以及预置数据。
4. MYSQL数据源配置参考
Maven Dependency
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
Configuration File
## MYSQL数据库配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/sbia_demo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.username = user
spring.datasource.password = password
参考
Springboot 模块分析 —— DataSourceAutoConfiguration 解析
Springboot 源码分析 —— 自动运行 SQL 文件解析
HikariCP连接池及其在springboot中的配置
Springboot 配置H2数据库