依賴:
<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>
約定俗成的配置:
resource文件夾下創建db/migration文件夾,里面放入自己寫的.sql文件,格式如下:
V或者R開頭(注意,必須是大寫),然后版本號(數字),兩個英文的下划線,接上名字再加上.sql,例如:V1.1__aa.sql
.sql文件里面可以放入數據庫導出的腳本,也可以是自己寫的SQL語句。
記得在application文件中配置好數據庫的信息,驅動,用戶名,密碼。
當SpringBoot啟動時,文件會自動被使用。以V開頭的文件會只會生效第一次,而以R開頭的文件每次啟動SpringBoot都會使用一次。
當成功后可以看到數據庫中有一個自動生成的名叫 flyway_schema_history 的表,這種表中的列和數據我拿一張圖來解析下。
flyway就是用flyway_schema_history這張表來記錄執行信息的,當一份以V開頭的文件被執行完之后會被記錄到表中,而以R開頭的文件因為每次啟動都會執行一次,所有不會有記錄到該表中。
當V開頭的文件被執行后,其被記錄到表中,一般來說,除非是刪除flyway_schema_history,不然是無法再次執行該V文件的,如果在后來的情況中修改了V文件導致其信息和表記錄的信息不符,還會在SpringBoot啟動時報錯。
單獨的刪除flyway_schema_history中的一列,似乎是無法正確使被執行的文件再次執行第二次的。
當刪除flyway_schema_history這張表后,所有的V或者R文件都會從頭到尾再次執行一遍,這個時候可能出現某些問題(例如:表存在覆蓋創建之類的,等等……),可以通過在SpringBoot進行某些設置來解決一些問題。在application文件中,以spring.flyway開頭。
這次給我感悟最深的是:約定俗成的東西是很重要的,如果格式的可能性太多,那么就直接寫死一個,然后把這個方式讓別人知道,就這么用。