SpringBoot + Flyway 发版再也不怕忘执行 SQL了

本文详细介绍了为何使用Flyway进行数据库版本控制,并展示了如何在SpringBoot应用中集成Flyway,包括简单示例、常见问题及源码参考。通过Flyway,可以避免手动执行SQL脚本,实现数据库版本的自动化升级和回滚。

为什么使用Flyway

最简单的一个项目是一个软件连接到一个数据库,但是大多数项目中我们不仅要处理我们开发环境的副本,还需要处理其他很多副本。例如:开发环境、测试环境、生产环境。想到数据库管理,我们立刻就能想到一系列问题

  • 如何快速收集执行脚本的清单

  • 执行的脚本总要人工执行,是否可以通过机器执行

  • 执行的脚本是否已经在数据库执行过

  • 执行的脚本是否全部在数据库中执行过

  • 执行的脚本如何回退

  • 如何初始化一个空数据库实例

Flyway是一款数据库版本控制管理工具,它可以简单的、可靠的升级你的数据库。它能帮助解决上面的问题。Flyway核心是记录所有版本演化和状态的MetaData,首次启动创建默认名为SCHEMA_VERSION的元素表。表中保存了版本,描述,要执行的sql脚本等信息。

Flyway已经支持数据库包括:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoeni

官网链接:https://flywaydb.org/

SpringBoot集成Flyway

2.1 简单示例

参考版本信息

参考目录结构

1.创建SpringBoot应用,并添加flyway-core依赖,本例中将实现初始化脚本到mysql数据库,因此同时引入了驱动依赖 mysql-connector-java

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>7.15.0</version>
</dependency>

参考pom.xml依赖如下

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        
Spring Boot项目中使用Flyway时,可以通过配置文件来指定SQL脚本的存放路径。Flyway默认会从`src/main/resources/db/migration`目录下查找SQL脚本文件。如果需要自定义SQL脚本的存放路径,可以在`application.properties`或`application.yml`中进行相应的配置。 ### 配置Flyway SQL脚本路径 #### 使用`application.properties`配置 在`application.properties`中,可以使用以下配置项来指定SQL脚本的存放路径: ```properties spring.flyway.locations=classpath:db/migration,filesystem:/path/to/your/sql/scripts ``` - `classpath:db/migration` 表示从类路径中加载SQL脚本。 - `filesystem:/path/to/your/sql/scripts` 表示从文件系统中加载SQL脚本。 #### 使用`application.yml`配置 在`application.yml`中,可以使用以下配置格式: ```yaml spring: flyway: locations: - classpath:db/migration - filesystem:/path/to/your/sql/scripts ``` ### SQL脚本命名规范 Flyway要求SQL脚本文件的命名遵循一定的命名规范,通常格式为: ``` V<本号>__<描述>.sql ``` 例如: ``` V1_0__Create_user_table.sql V1_1__Add_email_column_to_user.sql ``` - `V` 表示这是一个本化的迁移脚本。 - 本号可以是数字或带有下划线的字符串,用于标识脚本的执行顺序。 - 双下划线`__`之后的部分是对脚本的描述。 ### Flyway自动执行迁移 默认情况下,Spring Boot会在应用程序启动时自动执行Flyway迁移。可以通过以下配置项来启用或禁用自动迁移: ```properties spring.flyway.enabled=true ``` 如果设置为`false`,则需要手动触迁移操作。 ### 自定义Flyway配置类 如果需要更复杂的配置,比如动态设置SQL脚本路径,可以通过创建一个配置类来实现。以下是一个示例: ```java import org.flywaydb.core.Flyway; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FlywayConfig { @Value("${spring.flyway.locations}") private String[] locations; @Bean public Flyway flyway(javax.sql.DataSource dataSource) { return Flyway.configure() .dataSource(dataSource) .locations(locations) .load(); } } ``` 在这个配置类中,通过`@Value`注解注入了`spring.flyway.locations`配置的路径,并将其传递给Flyway的`locations`方法。 ### 总结 通过上述配置,可以在Spring Boot项目中灵活地指定Flyway SQL脚本的存放路径,并根据项目需求进行动态调整。这种方式不仅简化了数据库迁移的管理,还能确保数据库结构的本化控制。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值