差点带沟里了
最近有看过《Spring Boot 2.5 重磅公布》一文的敌人应该都晓得,Spring Boot 2.5 有一个数据源的重大变动,那就是某些数据源初始化的办法被从新设计了,上面的数据源参数配置也被破除了:
spring.datasource.*
新的数据源参数配置如下:
spring.sql.init.*
明天把我的项目降级到了 Spring Boot 2.5,再顺便把 spring.datasource 也换成了 spring.sql.init:
spring:
sql.init:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/javastack
username: root
password: 12345678
认为会很顺利,启动竟然报错:
数据源参数不是被重命名了吗,咋不行。。。
看来新的数据源参数并没有被辨认,于是抱着狐疑的态度看了下 Spring Boot 2.5 数据源参数绑定类 DataSourceProperties 的源码:
数据源参数绑定前缀仍然还是:spring.datasource!!!
咦……怎么和我原先了解的不太一样,有鬼了。。
再留神看上图右边局部,有 4 个类被标识破除了,而后我再全局搜寻了下新的参数 spring.sql.init 在源码中应用到的中央:
能够看到一些数据源参数被拿到 SqlInitializationProperties 类去了。
从破除的几个类,再到新参数应用到的几个新类, 它们都指向的是初始化 SQL 数据库(比方:新建一张表、初始化表数据),而不是初始化数据源(和数据库建设连接池),这是两个概念,前者须要依赖后者实现。。
WC,差点被带沟里了……
初始化 SQL 数据库
好吧,既然分明了,咱们再来验证下新的 SQL 数据库初始化机制,看看了解是否有错。
上面间接说重点,Spring Boot 根底框架就就不介绍了,不分明的能够关注公众号:Java 技术栈,在后盾回复:boot,我写的一堆实战教程都整顿好了。
增加数据源和 SQL 初始化参数:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/javastack
username: root
password: 12345678
sql.init:
schemaLocations:
- classpath:sql/create_t_javastack.sql
dataLocations:
- classpath:sql/insert_t_javastack.sql
留神下面的 sql.init.*,更多初始化参数请参考这个类:
org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties
新建对应的创立表 SQL 文件:
sql/create_t_javastack.sql
CREATE TABLE IF NOT EXISTS `t_javastack`(
`id` INT AUTO_INCREMENT,
`title` VARCHAR(50) NOT NULL,
`content` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
新建对应的初始化表数据 SQL 文件:
sql/insert_t_javastack.sql
insert into t_javastack(title, content) values
('题目 1', '内容 1'),
('题目 2', '内容 2'),
('题目 3', '内容 3'),
('题目 4', '内容 4'),
('题目 5', '内容 5');
OK,启动失常,再来验证下表是否创立,数据是否插入:
mysql> desc t_javastack;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(50) | NO | | NULL | |
| content | varchar(100) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> select * from t_javastack;
+----+---------+---------+
| id | title | content |
+----+---------+---------+
| 1 | 题目 1 | 内容 1 |
| 2 | 题目 2 | 内容 2 |
| 3 | 题目 3 | 内容 3 |
| 4 | 题目 4 | 内容 4 |
| 5 | 题目 5 | 内容 5 |
+----+---------+---------+
5 rows in set (0.00 sec)
当初终于和我了解的统一了,你了解了吗?
这个性能可能在单元测试的时候有用到,生产环境是不太可能会用到的。
总结
Spring Boot 2.5 中的 spring.sql.init. 是初始化 SQL 数据库应用的新参数前缀,不再应用前缀 spring.datasource. 了,后续版本会进行移除,其实就是 DDL/DML 配置和数据源连贯配置分家了。
新的参数的确也更分明清朗了,小伙伴们有用到 SQL 数据库初始化性能的,降级 Spring Boot 2.5 时能够留神一下。有时候实践看再多,还不如实际一次,实际出真谛,你认为你了解对了,其实不然。
本文残缺的的示例源码曾经上传:
https://github.com/javastacks…
大家能够 Star 学习一下,Spring Boot 2.5 我还在缓缓踩坑中,前面会造成更多实战干货文章,关注公众号 Java 技术栈第一工夫推送。
最初,大家感觉本文有用的话,动动小手,给栈长来个小小的在看、转发呗,原创不易,须要你的激励哦~
版权申明:本文系公众号 “Java 技术栈 ” 原创,原创实属不易,转载、援用本文内容请注明出处,禁止剽窃、洗稿,请自重,尊重大家的劳动成果和知识产权,剽窃必究。
近期热文举荐:
1.600+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!
3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!