SpringBoot(1):Liquibase 自動創(chuàng)建寫入數(shù)據(jù)庫數(shù)據(jù)表

1. 添加maven依賴(基于SpringBoot 2.1.1.RELEASE版本)
<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>
2.操作

功能介紹:當項目啟動的時候,將從數(shù)據(jù)庫導(dǎo)出的csv數(shù)據(jù)備份文件中的數(shù)據(jù)寫入到數(shù)據(jù)庫中。
需要在application.properties 文件中填寫db.changelog-master.yaml 的讀取路徑,這個文件中設(shè)置了許多的基本組件。

spring.liquibase.change-log=classpath:db/changelog/${spring.profiles.active:dev}/db.changelog-master.yaml
spring.profiles.active=dev

我這里對SpringBoot的運行環(huán)境做了區(qū)分,分別為開發(fā)環(huán)境dev ,成品環(huán)境。在運行的時候可以對運行環(huán)境進行設(shè)置。

properties文件

創(chuàng)建如下圖所示的文件夾:
image.png

其中 db/changelog/dev 文件夾下存放的是 Liquibase 相關(guān)的yaml文件

db.changelog-master.yaml:文件內(nèi)容如下

databaseChangeLog:
  - include:
      relativeToChangelogFile: true
      file: db.changelog-base.yaml
  - include:
      relativeToChangelogFile: true
      file: db.changelog-testdata.yaml

這兩個文件包含了db.changelog-base.yaml 這個是對備份的數(shù)據(jù)表的基本結(jié)構(gòu)的固定,而db.changelog-testdata.yaml則表示的是從數(shù)據(jù)庫導(dǎo)出的csv數(shù)據(jù)文件

db.changelog-base.yaml:

databaseChangeLog:
  - changeSet:
      id: 1543159801022-1
      author: longchamp (generated)
      changes:
        - createTable:
            columns:
              - column:
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    primaryKeyName: 33hao_areaPK
                  name: area_id
                  type: INT
              - column:
                  name: area_name
                  type: VARCHAR(255)
              - column:
                  name: area_parent_id
                  type: INT
              - column:
                  name: area_sort
                  type: INT
              - column:
                  name: area_deep
                  type: INT
              - column:
                  name: area_region
                  type: VARCHAR(255)
              - column:
                  name: adcode
                  type: INT
            tableName: 33hao_area
  - changeSet:
      id: 1543159801022-2
      author: longchamp (generated)
      changes:
        - createTable:
            columns:
              - column:
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    primaryKeyName: 33hao_goods_classPK
                  name: gc_id
                  type: INT
              - column:
                  name: gc_name
                  type: VARCHAR(255)
              - column:
                  name: type_id
                  type: INT
              - column:
                  name: type_name
                  type: VARCHAR(255)
              - column:
                  name: gc_parent_id
                  type: INT
              - column:
                  name: commis_rate
                  type: FLOAT
              - column:
                  name: gc_sort
                  type: INT
              - column:
                  name: gc_virtual
                  type: INT
              - column:
                  name: gc_title
                  type: VARCHAR(255)
              - column:
                  name: gc_keywords
                  type: VARCHAR(255)
              - column:
                  name: gc_description
                  type: VARCHAR(255)
              - column:
                  name: show_type
                  type: INT
              - column:
                  name: yy
                  type: VARCHAR(255)
              - column:
                  name: szd
                  type: VARCHAR(255)
              - column:
                  name: jx
                  type: VARCHAR(255)
            tableName: 33hao_goods_class

備注:每一個changeSet都表示針對一個表進行的操作,具體的結(jié)實參考Liquibase 的官方文檔,我這里簡單說一下 tableName 是將來要生成的數(shù)據(jù)表的表名。column 標簽指的是數(shù)據(jù)表,name是字段名稱,type是字段類型。createTable表示的是接下來的一切都是為了創(chuàng)建表

db.changelog-testdata.yaml:

databaseChangeLog:
  - changeSet:
      id: load-test-data
      author: snowy
      changes:
        - loadData:
            file: db/testdata/33hao_area.csv
            tableName: 33hao_area
        - loadData:
            file: db/testdata/33hao_goods_class.csv
            tableName: 33hao_goods_class

loadData表示加載數(shù)據(jù);file表示的是加載的數(shù)據(jù)所在的文件的路徑;tableName表示的是加載的數(shù)據(jù)的表的名稱

文件夾testdata

文件夾testdata 中所包含的是csv數(shù)據(jù)文件其內(nèi)部格式大體上為:

area_id,area_name,area_parent_id,area_sort,area_deep,area_region,adcode
1,北京,0,0,1,華北,110000
2,天津,0,0,1,華北,120000
3,河北,0,0,1,華北,130000
4,山西,0,0,1,華北,140000
5,內(nèi)蒙古,0,0,1,華北,150000
6,遼寧,0,0,1,東北,210000
7,吉林,0,0,1,東北,220000
8,黑龍江,0,0,1,東北,230000
9,上海,0,0,1,華東,310000
10,江蘇,0,0,1,華東,320000
11,浙江,0,0,1,華東,330000
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容