Spring Boot 2.5 终于对数据源动刀了!

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 最近有看过《Spring Boot 2.5 重磅发布》一文的朋友应该都知道,Spring Boot 2.5 有一个数据源的重大变动,那就是某些数据源初始化的方法被重新设计了,下面的数据源参数配置也被废除了:

spring.datasource.*

新的数据源参数配置如下:

spring.sql.init.*

今天把项目升级到了 Spring Boot 2.5,再顺便把 spring.datasource 也换成了 spring.sql.init:

image.png

以为会很顺利,启动居然报错:

image.png

数据源参数不是被重命名了吗,咋不行。。。

看来新的数据源参数并没有被识别,于是抱着怀疑的态度看了下 Spring Boot 2.5 数据源参数绑定类 DataSourceProperties 的源码:

image.png

image.png

image.png

从废除的几个类,再到新参数使用到的几个新类,它们都指向的是初始化 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

image.png

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/spring-boot-best-practice


大家可以 Star 学习一下,Spring Boot 2.5 我还在慢慢踩坑中,后面会形成更多实战干货文章,关注公众号Java技术栈第一时间推送。


最后,大家觉得本文有用的话,动动小手,给栈长来个小小的在看、转发呗,原创不易,需要你的鼓励哦~


版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重大家的劳动成果和知识产权,抄袭必究。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
40 0
|
5月前
|
前端开发 Java 数据库连接
基于Spring boot轻松实现一个多数据源框架
基于Spring boot轻松实现一个多数据源框架
134 0
|
6月前
|
XML Java 数据库连接
spring管理数据源和引入外部属性文件~
spring管理数据源和引入外部属性文件~
|
6月前
|
Java 数据库连接 Go
如何在Spring Boot应用中使用Nacos实现动态更新数据源
如何在Spring Boot应用中使用Nacos实现动态更新数据源
260 0
|
6天前
|
安全 Java 应用服务中间件
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
24 0
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
|
8天前
|
XML Java C++
【Spring系列】Sping VS Sping Boot区别与联系
【4月更文挑战第2天】Spring系列第一课:Spring Boot 能力介绍及简单实践
【Spring系列】Sping VS Sping Boot区别与联系
|
2月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
|
3月前
|
Java
springboot项目打包瘦身
springboot项目打包瘦身
|
8月前
|
Java Spring
java202304java学习笔记第六十天-ssm-spring配置文件-spring产生数据源对象2
java202304java学习笔记第六十天-ssm-spring配置文件-spring产生数据源对象2
31 0
|
4月前
|
druid Java 关系型数据库
Spring案例:数据源对象管理及加载properties文件
Spring案例:数据源对象管理及加载properties文件
33 0