SpringBoot整合flyway實現步驟解析
阿新 • • 發佈:2020-08-20
引入依賴
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版本記錄表的變化。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。