作者:常依sunrise | 来源:互联网 | 2023-09-17 10:28
1. 概述 Flyway用于数据库版本控制,官网这样解释Robust schema evolution across all your environments.With ease, pleasure, and plain SQL。更多介绍,请参阅Flyway官网。Flyway是一个开源的数据库迁移工具,它更倾向于简单和约定优于配置的方式,迁移数据可以写成SQL或者java 程序,支持多种接入方式,例如命令行客户端、Java API、Maven构建、Gradle构建等
2. 核心依赖 新建一个spring boot 项目,在pom.xml文件中引入核心依赖
< dependency> < groupId> org.springframework.boot groupId> < artifactId> spring-boot-starter-web artifactId> dependency> < dependency> < groupId> org.flywaydb groupId> < artifactId> flyway-core artifactId> dependency> < dependency> < groupId> mysql groupId> < artifactId> mysql-connector-java artifactId> < scope> runtime scope> dependency> < dependency> < groupId> org.springframework.boot groupId> < artifactId> spring-boot-starter-jdbc artifactId> dependency>
3. yml配置文件 spring : application : name : springboot- flyway datasource : type : com.mysql.cj.jdbc.MysqlDataSource driver-class-name : com.mysql.cj.jdbc.Driver url : jdbc: mysql: //xx.xx.xx.xx: 3306/springboot? useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezOne=GMT%2B8 username : 用户名 password : 密码 hikari : minimum-idle : 5 idle-timeout : 180000 maximum-pool-size : 10 auto-commit : true pool-name : HikariCP max-lifetime : 1800000 connection-timeout : 30000 connection-test-query : SELECT 1 flyway : enabled : true check-location : true locations : - classpath: db/migration encoding : UTF- 8 baseline-on-migrate : true table : flyway_schema_history baseline-version : 0 validate-on-migrate : true clean-disabled : false clean-on-validation-error : false sql-migration-prefix : V sql-migration-separator : __ sql-migration-suffixes : .sql
注意:sql文件中有版本号为1时,baseline-version版本号配置为0 更多配置可参阅官网配置信息
4. SQL文件 在resources目录下新建db/migration目录,并新建两个sql文件V1__schema.sql和V2__data.sql
CREATE TABLE emp_info ( id BIGINT UNSIGNED auto_increment NOT NULL COMMENT '主键ID' , emp_code varchar ( 30 ) NULL COMMENT '员工编码' , emp_name varchar ( 30 ) NULL COMMENT '员工名称' , sex TINYINT NULL COMMENT '性别0:男;1:女;2:未知' , phone varchar ( 11 ) NULL COMMENT '手机号' , CONSTRAINT emp_info_pk PRIMARY KEY ( id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '员工信息表' ;
INSERT INTO emp_info ( id, emp_code, emp_name, sex, phone) VALUES ( NULL , '10001' , '张三' , 0 , '13098783567' ) ;
注意:sql文件命名规则是V + 版本号 + 双下划线(__) + 文件名 + .sql
5. 验证 编写主启动类,启动SpringBoot项目 数据库中会新建表flyway_schema_history,表中会记录执行sql的信息。并执行sql文件中的sql