SpringBoot是為了簡化Spring應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程
目前 Spring Boot 支持較好的兩款工具分別是 flyway、liquibase,支持 sql script,在初始化數據源之后執行指定的腳本代碼或者腳本文件,本章基於 Liquibase…
Liquibase
LiquiBase 是一個用於數據庫重構和遷移的開源工具,通過 changelog文件 的形式記錄數據庫的變更,然后執行 changelog文件 中的修改,將數據庫更新或回滾到一致的狀態。
主要特點
- 支持幾乎所有主流的數據庫,如MySQL、PostgreSQL、Oracle、Sql Server、DB2等
- 支持多開發者的協作維護;
- 日志文件支持多種格式;如XML、YAML、SON、SQL等
- 支持多種運行方式;如命令行、Spring 集成、Maven 插件、Gradle 插件等
在平時開發中,無可避免測試庫增加字段或者修改字段以及創建表之類的,環境切換的時候如果忘記修改數據庫那么肯定會出現 不可描述的事情 ,這個時候不妨考慮考慮Liquibase。
官方文檔:http://www.liquibase.org/documentation/index.html
本章目標
利用 Spring Boot 集成 Liquibase,避免因粗心大意導致環境遷移時缺少字段….
導入依賴
依賴 spring-boot-starter-jdbc 目的是為了讓 liquibase 能夠獲得 datasource ,這里換成 mybatis、hibernate 等也是一樣,主要偷懶不想寫配置….
1 |
<dependencies> |
屬性配置
只要依賴了 liquibase-core 默認可以不用做任何配置,但還是需要知道默認配置值是什么,這樣方便定位和解決問題
1 |
spring.datasource.driver-class-name=com.mysql.jdbc.Driver |
更多配置
spring.liquibase.change-log配置文件的路徑,默認值為classpath:/db/changelog/db.changelog-master.yamlspring.liquibase.check-change-log-location檢查change log的位置是否存在,默認為true.spring.liquibase.contexts用逗號分隔的運行環境列表。spring.liquibase.default-schema默認數據庫schemaspring.liquibase.drop-first是否先drop schema(默認false)spring.liquibase.enabled是否開啟liquibase(默認為true)spring.liquibase.password數據庫密碼spring.liquibase.url要遷移的JDBC URL,如果沒有指定的話,將使用配置的主數據源.spring.liquibase.user數據用戶名spring.liquibase.rollback-file執行更新時寫入回滾的 SQL文件
db.changelog-master.yaml
1 |
databaseChangeLog: |
test1.sql
1 |
INSERT INTO `person` (`id`, `first_name`, `last_name`) VALUES ('2', '哈哈', '呵呵'); |
上面的
yaml文件其實就是從下面的XML演變而來的,官方是支持xml,yaml,json三種格式,寫法也比較簡單
傳送門(官方給出了三種寫法格式,依樣畫葫蘆就可以了):http://www.liquibase.org/documentation/changes/sql_file.html
1 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
主函數
1 |
package com.battcn; |
測試
1.啟動Chapter23Application.java中的main方法
從日志中可以看到Liquibase 在幫我們執行定義好的SQL,如果是第一次啟動,那么數據庫會存在databasechangelog 和 databasechangeloglock兩種表,從名字就可以看出,故而不作過多解釋
2.SQL中的語法是創建一張person表和 兩次 INSERT 操作



