《Spring Boot 3实战案例合集》现已囊括超过80篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最前沿的技术资讯与实践经验。欢迎积极订阅,享受不断升级的知识盛宴!订阅用户将特别获赠合集内所有文章的最终版MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。
【重磅发布】《Spring Boot 3实战案例锦集》PDF电子书现已出炉!
🎉🎉我们精心打造的《Spring Boot 3实战案例锦集》PDF电子书现已正式完成,目前已经有80个案例,后续还将继续更新。文末有电子书目录。
💪💪永久更新承诺:
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。这意味着,随着技术的不断发展和Spring Boot 3的深入应用,我们的电子书也将持续更新,确保您始终掌握最前沿、最实用的技术知识。
💌💌如何获取:
请立即订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot2.7.18 + Flyway8.5.13
1. 简介
Flyway是一个开源的数据库迁移工具,它通过定义一系列有序的SQL脚本(称为迁移),帮助你管理数据库的结构变更。这些迁移脚本可以用于创建表、修改列、添加索引等任何数据库更改操作。Flyway的主要特性和优势包括:
版本控制:Flyway为数据库的每个变更分配一个版本号,只有新的变更才会被应用,已经应用过的变更不会重复执行。这使得数据库变更更加可控和可追踪。
跨平台:Flyway支持主流的关系型数据库,包括MySQL、PostgreSQL、Oracle、SQL Server等。
易用性:Flyway提供了简单的命令行界面和API,使得开发人员可以轻松地集成到他们的项目中。同时,它还支持与Spring Boot等主流开发框架进行集成。
自动化:Flyway可以自动化执行数据库迁移,这使得敏捷开发团队可以更快地开发新功能,同时也可以更容易地进行测试和部署。
在实际项目开发中通过Flyway可以确保每个数据库变更都有一个唯一的版本号,并按照版本号顺序执行,从而避免了重复或错乱的变更。这使得开发人员能够清晰地跟踪和管理数据库的历史变更,并确保不同环境(如开发、测试和生产)之间的数据库结构一致性。
2. 实战案例
注意:我当前使用的版本Flyway对应的数据库mysql版本必须是8。
2.1 引入依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
</dependency>
2.2 配置数据库
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/pack?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8
username: root
password: xxxooo
type: com.zaxxer.hikari.HikariDataSource
2.3 Flyway配置
spring:
flyway:
enabled: true
# 用于存储迁移历史记录的表名, 默认: flyway_schema_history
table: flyway_schema_history
# 迁移脚本编码, 默认: UTF-8
encoding: UTF-8
# 当迁移数据库存在但没有元数据的表时,自动执行基准迁移,新建flyway_schema_history表
true :
# 数据库迁移脚本的位置, 默认: classpath:db/migration
# 这里也支持文件系统路径,前缀:filesystem:
locations:
classpath:db/migration
上面的配置都使用的默认值,如果你没有自定义需求,你完全可以不进行配置。
最终项目目录结构如下:
初始数据库中有如下表:
2.4 准备数据库升级脚本
接下来在db/migration下新建一个迁移脚本(升级),文件名:V1.0_001__create_table.sql
create table t_person (
id int auto_increment primary key,
name varchar(32) not null,
sex varchar(2) not null,
age int default 0
);
创建表t_person。
特别说明:通常情况下,迁移脚本的格式为 V<VERSION>__<NAME>.sql(其中 <VERSION> 为下划线分隔的版本,如 "1 "或 "2_1";<NAME>一般你可以写上该脚本的描述信息)。还有一点要注意:<VERSION>与<NAME>中间是两个下划线:'__',最终目录如下:
到此所有的配置都完成,接下来只需要启动服务即可。
2.5 启动应用服务
控制台输出
通过控制台输出,得到下面两个重要信息:
创建表flyway_schema_history
成功升级一个脚本版本是v1.0.001
查看数据库情况
执行了升级脚本,创建了数据库。查看flyway_schema_history表数据:
记录了升级脚本文件及版本信息。当多次启动服务并不会重复的执行。如果你将这里的记录删除再吧t_person表删除,那么下次重启服务还会执行升级脚本。
经过xxx时间后系统升级数据库脚本也升级了,我们可以继续添加升级脚本文件,如下:
新增了一个脚本文件V1.1_001__update-t_person.sql,文件内容:
alter table t_person add column email varchar(32) default '';
启动服务,控制台输出:
升级记录表中新增了一条记录
到此一个简单的Flyway应用就完成了,接下来我们继续Flyway在SpringBoot中更多用法。
3. Flyway其它用法
3.1 指定数据库类型
我们可以通过如下配置来设置具体数据库类型的脚本路径
spring:
flyway:
locations:
- classpath:db/migration/{vendor}
通过{vendor}占位符,该占位符会更加你当前环境的数据库类型自动替换,我们只需要在对应的路径下建立文件夹及升级文件即可,如下:
3.2 使用其它数据库
在默认情况下,Flyway使用的是你当前环境中主数据源(存在多个的时候,应用@Primary标记的数据源),我们可以通过如下两种方式使用其它数据源(多数据源情况下):
自定义FlywayDataSource
@Bean
@FlywayDataSource
DataSource flywayDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/msg?serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false&characterEncoding=UTF-8");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPoolName("flyway") ;
dataSource.setPassword("xxxooo");
return dataSource ;
}
通过使用@FlywayDataSource注解。
定义flyway数据源信息
spring:
flyway:
user: root
password: xxxooo
url: jdbc:mysql://localhost:3306/msg?serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false
通过spring.flyway.*指定flyway自己的数据源。
以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏
推荐文章
实战案例SpringBoot整合Seata AT模式实现分布式事务【超详细】
高级开发!性能优化,Spring Boot 不使用AOP也能优雅的记录日志
技术专家!Spring Boot 增强版 @RequestMapping 添加限流功能
【专家级】Spring事件机制,深入剖析,提升你的技术水平!
【Spring/Boot/Cloud】这些扩展点一定要知道,从应用到原理详解