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

简介: 最近有看过《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技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重大家的劳动成果和知识产权,抄袭必究。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
2733 17
Spring Boot 两种部署到服务器的方式
|
9月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
384 0
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
575 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
786 2
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
514 2
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
1114 1
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
186 2
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
246 2
|
存储 Java 数据库
Spring Boot中的动态数据源切换
Spring Boot中的动态数据源切换
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
411 0

热门文章

最新文章