springboot实现Flyway数据库迁移

    技术2022-07-10  138

    FlyWay可以帮助我们更好的管理项目的sql脚本,由我们手动执行改为自动执行,以下大概写个步骤

    1:pom文件引入依赖

    <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.1</version> </dependency> <plugin> <!--引入maven:flyway插件--> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>4.1.0</version> </plugin>

    2:加入对应配置

    #是否开启flyway 开启:项目启动自动执行对应目录下的脚本文件,如果关闭,需要通过插件,或者是java 程序调用实现手动执行 spring.flyway.enabled=false #flyway执行目录,此配置默认为classpath:db/migration spring.flyway.locations=sql #其余配置自行百度

    3:映射实体配置类,生成Flyway对象注入容器

    import org.flywaydb.core.Flyway; import org.flywaydb.core.api.Location; import org.flywaydb.core.api.configuration.ClassicConfiguration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FlywayConfiguration { @Value("${spring.datasource.url}") private String datasourceUrl; @Value("${spring.datasource.username}") private String databaseUsername; @Value("${spring.datasource.password}") private String databasePassword; // 脚本存放路径 @Value("${spring.flyway.locations}") private String locations; @Bean Flyway flyway() { //通过此配置可配置flyway的属性 Location location = new Location(locations); ClassicConfiguration classicConfiguration = new ClassicConfiguration(); classicConfiguration.setDataSource(datasourceUrl, databaseUsername, databasePassword); classicConfiguration.setBaselineOnMigrate(true); classicConfiguration.setLocations(location); Flyway flyway = new Flyway(classicConfiguration); flyway.setLocations(locations); return flyway; } }

    4:在对应的java方法中注入Flyway对象,调用对应的方法即可

    @Autowired private Flyway flyway; @RequestMapping(value = "/data/migrate", method = RequestMethod.GET) @ApiOperation("数据迁移") public Integer doDataMigrate() { flyway.setLocations("sql1"); //.migrate() 执行对应目录下的脚本文件 return flyway.migrate(); }

    说明:执行迁移时,会在对应数据库建立一个数据库迁移的记录表,默认表名为

    flyway_schema_history

    用以记录数据迁移

    5:对应脚本说明

    脚本的命名有自己的规范: V版本号__描述.sql,注意版本号与描述之间是两个下划线;

    例如:V1__ceshi1.sql 脚本内容说明:

    -- ------------------------------ -- 声明自己所要使用的数据库 -- ------------------------------ use flyway; -- ------------------------------ -- 对应的库表sql语句 -- ------------------------------ CREATE TABLE person ( id int(11) NOT NULL AUTO_INCREMENT, first varchar(100) NOT NULL, last varchar(100) NOT NULL, dateofbirth DATE DEFAULT null, placeofbirth varchar(100) not null, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    说明: @1版本以V开头,每个文件只会被执行一次 @1版本以R开头,每次调用每个文件都会被会被执行一次

    sql脚本对应的执行顺序依照其命名规则: 递增依次执行

    Processed: 0.020, SQL: 9