springboot 集成flyway数据库迁移版本控制详细教程
Flyway 是一个开源的数据库迁移工具,它帮助开发者在项目中管理数据库模式的版本控制。Spring Boot 对 Flyway 提供了很好的支持,使得集成过程变得非常简单。下面是一个详细的教程,指导如何在 Spring Boot 应用程序中集成 Flyway。
准备工作
确保你的开发环境中已经安装了以下软件:
- Java JDK(建议使用最新版本)
- Maven 或 Gradle(用于构建项目)
- 一个支持 SQL 的数据库(如 MySQL, PostgreSQL, H2 等)
步骤 1: 创建 Spring Boot 项目
如果你还没有一个 Spring Boot 项目,可以使用 Spring Initializr 快速创建一个。访问 Spring Initializr 并选择以下选项:
- Project: Maven Project 或 Gradle Project
- Language: Java
- Spring Boot 版本:选择最新的稳定版
- 添加依赖:Web, JPA, 和 Flyway
点击 “Generate” 下载项目压缩包,并解压到你的工作目录。
步骤 2: 添加依赖
pom.xml文件添加如下配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
步骤 3: 配置数据库连接
打开项目的 application.properties
文件或 application.yml
文件,添加数据库连接信息。例如,如果你使用的是 MySQL 数据库,配置可能如下所示:
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
步骤 4: 配置 Flyway
在大多数情况下,你不需要额外配置 Flyway,因为 Spring Boot 会自动配置 Flyway 来扫描 src/main/resources/db/migration
目录下的迁移脚本。但是,如果你想自定义一些设置,可以在 application.properties
或 application.yml
中进行配置。例如:
application.properties
spring.flyway.enabled=true
spring.flyway.locations=classpath:/db/migration,classpath:/custom-migration
application.yml
spring:
flyway:
enabled: true
locations: classpath:/db/migration,classpath:/custom-migration
更多配置示例
spring:
# 数据库连接配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flyway-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: root
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验,默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
- 可以自行修改,系统默认配置就是上述代码(即不配置时)
步骤 5: 编写迁移脚本
Flyway 使用版本化的 SQL 脚本来管理数据库迁移。脚本应该放在 src/main/resources/db/migration
目录下,文件名格式为 V<version>__<description>.sql
。例如:
- V1__create_users_table.sql
- V2__add_email_to_users.sql
每个脚本中的 SQL 命令会在应用启动时按照版本号顺序执行。这是一个简单的示例脚本:
V1__create_users_table.sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL
);
步骤 6: 检查 Flyway 初始化
确保 Flyway
在启动时正确初始化,如果运行代码时,没有执行sql
脚本。你可以在 Application
类中手动调用 Flyway
的初始化方法:
import org.flywaydb.core.Flyway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class YourApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(YourApplication.class, args);
Flyway flyway = context.getBean(Flyway.class);
flyway.migrate();
}
@Bean
public Flyway flyway(DataSource dataSource) {
return Flyway.configure().dataSource(dataSource).load();
}
}
步骤 7: 运行应用程序
完成以上步骤后,你可以运行 Spring Boot 应用程序。Flyway 将自动检测并执行迁移脚本。如果一切正常,你应该能够看到数据库表结构已经被成功创建或更新。
步骤 8: 检查迁移状态
Flyway 默认会在数据库中创建一个名为 flyway_schema_history
的表来记录所有的迁移操作。你可以查询这个表来检查迁移的状态。
注意事项
- 确保数据库用户有足够的权限来创建和修改表。
- 在生产环境中谨慎使用迁移工具,确保所有更改都经过充分测试。
- 可以通过
spring.flyway.baseline-on-migrate=true
参数来启用基线迁移,这对于已有数据的老系统特别有用。
通过以上步骤,你应该能够在 Spring Boot 应用中成功集成 Flyway 来管理数据库迁移。
原文地址:https://blog.csdn.net/weixin_40986713/article/details/142884041
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!