1. 程式人生 > 程式設計 >SpringBoot整合flyway實現步驟解析

SpringBoot整合flyway實現步驟解析

引入依賴

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>com.yang</groupId>
  <artifactId>fly-way-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>fly-way-demo</name>
  <description>Demo project for Spring Boot</description>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <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>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

第一版sql指令碼

src/main/resources/db/migration/V1__sys_dept.sql

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
 `dept_id` int(20) NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL COMMENT '部門名稱',`sort` int(11) DEFAULT '0' COMMENT '排序',`create_time` datetime DEFAULT NULL COMMENT '建立時間',`update_time` datetime DEFAULT NULL COMMENT '修改時間',`del_flag` char(1) DEFAULT '0' COMMENT '是否刪除 -1:已刪除 0:正常',`parent_id` int(11) DEFAULT NULL,PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='部門管理';

第二版sql指令碼

src/main/resources/db/migration/V1.1__sys_dept.sql

INSERT INTO `sys_dept` VALUES (1,'總經辦','2020-03-13 13:13:16','2020-03-13 13:14:31','0',0);
INSERT INTO `sys_dept` VALUES (2,'行政中心',1,'2020-03-13 13:13:30',NULL,1);
INSERT INTO `sys_dept` VALUES (3,'技術中心',2,'2020-03-13 13:14:55',1);
INSERT INTO `sys_dept` VALUES (4,'運營中心',3,'2020-03-13 13:15:15',1);
INSERT INTO `sys_dept` VALUES (5,'研發中心',5,'2020-03-13 13:15:34',3);
INSERT INTO `sys_dept` VALUES (6,'產品中心',6,'2020-03-13 13:15:49',3);
INSERT INTO `sys_dept` VALUES (7,'測試中心',7,'2020-03-13 13:16:02',3);

專案配置檔案,主要是dataSource,flyway的採用約定值

src/main/resources/application.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/fly_way?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

一些flyway配置項

flyway.baseline-description對執行遷移時基準版本的描述.
flyway.baseline-on-migrate當遷移時發現目標schema非空,而且帶有沒有元資料的表時,是否自動執行基準遷移,預設false.
flyway.baseline-version開始執行基準遷移時對現有的schema的版本打標籤,預設值為1.
flyway.check-location檢查遷移指令碼的位置是否存在,預設false.
flyway.clean-on-validation-error當發現校驗錯誤時是否自動呼叫clean,預設false.
flyway.enabled是否開啟flywary,預設true.
flyway.encoding設定遷移時的編碼,預設UTF-8.
flyway.ignore-failed-future-migration當讀取元資料表時是否忽略錯誤的遷移,預設false.
flyway.init-sqls當初始化好連線時要執行的SQL.
flyway.locations遷移指令碼的位置,預設db/migration.
flyway.out-of-order是否允許無序的遷移,預設false.
flyway.password目標資料庫的密碼.
flyway.placeholder-prefix設定每個placeholder的字首,預設${.
flyway.placeholder-replacementplaceholders是否要被替換,預設true.
flyway.placeholder-suffix設定每個placeholder的字尾,預設}.
flyway.placeholders.[placeholder name]設定placeholder的value
flyway.schemas設定需要flywary遷移的schema,大小寫敏感,預設為連線預設的schema.
flyway.sql-migration-prefix遷移檔案的字首,預設為V.
flyway.sql-migration-separator遷移指令碼的檔名分隔符,預設__
flyway.sql-migration-suffix遷移指令碼的字尾,預設為.sql
flyway.tableflyway使用的元資料表名,預設為schema_version
flyway.target遷移時使用的目標版本,預設為latest version
flyway.url遷移時使用的JDBC URL,如果沒有指定的話,將使用配置的主資料來源
flyway.user遷移資料庫的使用者名稱
flyway.validate-on-migrate遷移時是否校驗,預設為true.

啟動專案可以看到業務表的變化及flyway_schema_history版本記錄表的變化。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。