暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

Flyway7.15版本支持Halo

贾桂军 2024-01-22
15031

数据库使用版本控制工具是至关重要的。在Flyway7.15版本中加入了对Halo的兼容,数据库结构与应用程序的演进和迭代同步非常重要。在本文中,我们将介绍如何使用 Flyway 这个强大的开源数据库版本控制工具来管理 Halo 数据库的版本迁移。通过使用 Flyway,您可以轻松地跟踪和应用数据库结构的变化,并确保整个团队的数据库环境始终保持一致。


一、Flyway的工作方式:

1、初始化:Flyway会创建一个用于存储元数据的特殊表(默认为"flyway_schema_history"),该表用于跟踪已应用的迁移。

2、配置:您需要配置Flyway以连接到目标数据库,并指定迁移脚本的位置、数据库方言等。

3、迁移脚本:编写迁移脚本,这些脚本描述了数据库结构的变更或数据的初始化/更新。迁移脚本可以使用SQL(如DDL、DML)编写,文件名必须按照特定的命名规则(例如,V1__create_user.sql)。

4、执行迁移:运行Flyway命令,触发数据库迁移过程。Flyway将扫描指定位置的迁移脚本,并按照严格的顺序逐个执行。

5、版本控制:Flyway会检查元数据表中记录的已应用迁移的版本号。对比迁移脚本的文件名与元数据表中的版本记录,Flyway确定哪些迁移脚本尚未应用,并依次执行它们。

6、应用迁移:在执行迁移脚本期间,Flyway会将每个脚本的内容发送到目标数据库,并记录已应用的迁移脚本的元数据。这些元数据包括迁移脚本的版本号、描述、应用日期等信息。


二、在springboot中使用

1、Flyway.jar包放入lib文件,在pom文件导入依赖。


2、application.properties文件配置

spring.datasource.url=jdbc:halo://10.17.17.220:1921/halo0rootspring.datasource.username=user1spring.datasource.password=123456spring.datasource.driver-class-name=com.halo.Driver
spring.flyway.enabled=truespring.flyway.baseline-on-migrate=truespring.flyway.locations=classpath:migrationspring.flyway.sql-migration-prefix=Vspring.flyway.sql-migration-suffixes=.sqlspring.flyway.validate-on-migrate=truespring.flyway.table=flyway_schema_historyspring.flyway.clean-on-validation-error=truespring.flyway.repair=truespring.flyway.schemas=db1


3、编写迁移脚本

脚本的命名规范:

3.1、文件名前缀:迁移脚本的文件名必须以一个大写的"V"开始,表示版本(Version),后面紧跟着版本号,可以是一个或多个数字或字母。

3.2、版本号:版本号用于标识迁移脚本在执行顺序中的位置。它可以是一个简单的数字序列,也可以包含点号(.)和下划线(_)。通常,版本号遵循"主版本.次版本"的格式。

4、启动springboot项目

从日志上可以看到,已经成功执行了5个脚本。

查看数据库跟踪迁移记录表以及用户表都创建完毕。

5、在V1的迁移版本后追加脚本。

V1.1__create_student.sqlCREATE TABLE studentTest (         id INT PRIMARY KEY,         name VARCHAR(100) NOT NULL,         age INT NOT NULL,         sex int);
V1.2__add_student.sqlINSERT INTO studentTest (id, name,age,sex) VALUES (1, 'kapu',23,'男');INSERT INTO studentTest (id, name,age,sex) VALUES (2, '小张',90,'男');
V1.3__add_student.sqlINSERT INTO studentTest (id, name,age,sex) VALUES (3, 'jup',45,'女');INSERT INTO studentTest (id, name,age,sex) VALUES (3, '小红',10,'女');

增加迁移脚本后,启动程序。

应用启动日志显示已成功执行新增脚本操作,查看数据库的跟踪迁移记录表。


如果不希望使用追加迁移脚本,并且想要使用可重复调用的脚本。

以 “R” 开头的脚本通常被用于可重复迁移INSERT INTO studentTest (id, name,age,sex) VALUES (5, 'Current',45,'女');INSERT INTO studentTest (id, name,age,sex) VALUES (6, 'pot',30,'女');


"需要注意的是,已经成功执行的迁移脚本不应该被修改,否则可能会引发冲突并导致未知错误"

如下,修改了脚本中的字段类型引发的错误。

解决方法:

1、删除跟踪迁移记录表中脚本记录并重新执行。

2、为了确保修改的通顺性,应添加新的版本追加迁移脚本,而不是直接修改已有的迁移脚本。这样可以避免冲突并确保更新的顺序正确。


三、多数据源配置

1、application.properties文件增加多数据配置。

spring.datasource.primary.jdbc-url=jdbc:halo://10.17.17.220:1921/halo0rootspring.datasource.primary.username=user1spring.datasource.primary.password=123456spring.datasource.primary.driver-class-name=com.halo.Driver
spring.flyway.enabled=truespring.flyway.primary.baseline-on-migrate=truespring.flyway.primary.locations=classpath:migrationspring.flyway.primary.sql-migration-prefix=Vspring.flyway.primary.sql-migration-suffixes=.sqlspring.flyway.primary.validate-on-migrate=truespring.flyway.primary.table=flyway_schema_historyspring.flyway.primary.clean-on-validation-error=truespring.flyway.primary.repair=truespring.flyway.primary.schemas=db1
spring.datasource.secondary.jdbc-url=jdbc:halo://10.17.17.180:1922/testspring.datasource.secondary.username=testspring.datasource.secondary.password=testspring.datasource.secondary.driver-class-name=com.halo.Driver
spring.flyway.secondary.baseline-on-migrate=truespring.flyway.secondary.locations=classpath:migration2spring.flyway.secondary.sql-migration-prefix=Vspring.flyway.secondary.sql-migration-suffixes=.sqlspring.flyway.secondary.validate-on-migrate=truespring.flyway.secondary.table=flyway_schema_historyspring.flyway.secondary.clean-on-validation-error=truespring.flyway.secondary.repair=truespring.flyway.secondary.schemas=sys


2、创建DataSourceConfig配置类,用于配置多数据源相关设置

@Configurationpublic class DataSourceConfig {    @Primary    @Bean(name = "primaryDataSource")    @ConfigurationProperties(prefix = "spring.datasource.primary")    public DataSource primaryDataSource() {        return DataSourceBuilder.create().build();    }
@Primary @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build();    }}


3、创建FlywayConfig配置类,关联数据源,配置flyway。

@Configurationpublic class FlywayConfig {    @Autowired    @Qualifier("primaryDataSource")    private DataSource primaryDataSource;
@Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource;
@Bean(initMethod = "migrate") @DependsOn("primaryDataSource") public Flyway primaryFlyway() { return Flyway.configure() .dataSource(primaryDataSource) .locations("classpath:migration") .schemas("db1") .baselineOnMigrate(true) .validateOnMigrate(true) .load(); }
@Bean(initMethod = "migrate") @DependsOn("secondaryDataSource") public Flyway secondaryFlyway() { return Flyway.configure() .dataSource(secondaryDataSource) .locations("classpath:migration2") .schemas("sys") .baselineOnMigrate(true) .validateOnMigrate(true) .load(); }}

   

4、编写不同数据源的迁移脚本

 启动springboot项目


查看两个不同源数据库的跟踪迁移记录表以及用户表都创建完毕。

primaryDataSource数据源

secondaryDataSource数据源

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论