前置条件

此文档介绍choerodon-tool-liquibase0.17.0.RELEASE及以上版本使用详情。

介绍

初始化数据库工具,使用指定文件夹的groovy文件创建数据库表,使用execl文件(只能是.xlsx格式文件)初始化数据。 此工具是对hzero-installer初始化工具的二开。

使用

初始化文件目录

  • 初始化文件应放于资源目录script/db目录下
  • groovy文件存放需要初始化的groovy脚本
  • init-data文件存放需要初始化的excel文件
  • service-mapping.xml初始化配置

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!--服务映射-->
    3. <services>
    4. <schema-merge>
    5. <!-- oracle merge是否默认安装到一个库下,若要分多个库,需设置 merge=false -->
    6. <oracle merge="false" target-schema="" />
    7. <mysql merge="false" target-schema="" />
    8. <sqlserver merge="false" target-schema="" />
    9. <postgresql merge="false" target-schema="" />
    10. </schema-merge>
    11. <!-- name和filename: 对应本地文件名,默认与安装目标库名一致; schema: 安装目标库名 env:使用对应的数据源,非必填,多数据源初始化时需要用到 -->
    12. <service name="hzero_platform" filename="hzero_platform" schema="hzero_platform" env="platform" description="平台服务"/>
    13. <service name="devops_service" filename="devops_service" schema="devops_service" description="devops服务"/>
    14. </services>
  • 目录层级如下: liquibase初始化工具 - 图1

choerodon-tool-liquibase.jar包初始化脚本

  1. #!/usr/bin/env bash
  2. MAVEN_LOCAL_REPO=$(cd / && mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)
  3. TOOL_GROUP_ID=io.choerodon
  4. TOOL_ARTIFACT_ID=choerodon-tool-liquibase
  5. TOOL_VERSION=0.17.1.RELEASE
  6. TOOL_JAR_PATH=${MAVEN_LOCAL_REPO}/${TOOL_GROUP_ID/\./\/}/${TOOL_ARTIFACT_ID}/${TOOL_VERSION}/${TOOL_ARTIFACT_ID}-${TOOL_VERSION}.jar
  7. mvn org.apache.maven.plugins:maven-dependency-plugin:get \
  8. -Dartifact=${TOOL_GROUP_ID}:${TOOL_ARTIFACT_ID}:${TOOL_VERSION} \
  9. -Dtransitive=false
  10. java -Dspring.datasource.url="jdbc:mysql://localhost:3306/?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
  11. -Dspring.datasource.username=root \
  12. -Dspring.datasource.password=123456 \
  13. -Dspring.datasource.driver-class-name=com.mysql.jdbc.Driver \
  14. -Ddata.init=true \
  15. -Dlogging.level.root=info \
  16. -Dinstaller.jarPath=target/app.jar \
  17. -Dinstaller.jarPath.init=true \
  18. -jar ${TOOL_JAR_PATH}
  • -Dspring.datasource.url: 数据源url 不需要指定数据库名会根据配置的数据库名初始化到对应的数据库
  • -Dspring.datasource.username:数据库登陆用户
  • -Dspring.datasource.driver-class-name:数据库驱动,默认oracle
  • -Ddata.init:是否使用excel数据进行数据初始化
  • -Dlogging.level.root:日志级别
  • -Dinstaller.jarPath:groovy和excel所在的jar包,扫描.groovy.xlsx文件
  • -Dinstaller.jarPath.init:是否递归扫描jar包中依赖的jar包中的.groovy.xlsx文件

多数据源初始化

  • 更改service-mapping.xml文件,对于需要多数据源初始化的服务,添加初始化数据源 liquibase初始化工具 - 图2

  • 执行liquibse工具的时候,添加数据源

    1. # env=platform的数据源
    2. -Dinstaller.datasources.platform.url="jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
    3. -Dinstaller.datasources.platform.username=root \
    4. -Dinstaller.datasources.platform.password=root \
    5. -Dinstaller.datasources.platform.driver-class-name=com.mysql.jdbc.Driver \
    6. # 默认数据源 必须配置
    7. -Dspring.datasource.url="jdbc:mysql://localhost:3307/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
    8. -Dspring.datasource.driver-class-name=com.mysql.jdbc.Driver \
    9. -Dspring.datasource.username=root \
    10. -Dspring.datasource.password=root \
    11. -Dlogging.level.root=info \
    12. -Dinstaller.mapping=mapping/service-mapping.xml \
    13. -Dinstaller.jarPath=target/app.jar \
    14. -jar ${TOOL_JAR_PATH}

镜像初始化配置

  1. ## 初始化配置至配置服务及初始化本服务数据库
  2. preJob:
  3. # job 超时时间
  4. timeout: 1200
  5. # 工具 jar 包镜像库地址
  6. image: registry.cn-shanghai.aliyuncs.com/c7n/dbtool:0.7.2
  7. # 初始化数据库定义
  8. preInitDB:
  9. # 是否初始化本服务数据库
  10. enabled: true
  11. datasource:
  12. # 本服务数据库相关信息
  13. url: jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true&serverTimezone=Asia/Shanghai
  14. username: username
  15. password: password
  16. driver: com.mysql.jdbc.Driver
  17. datasources:
  18. # 多数据源初始化
  19. platform:
  20. url: jdbc:mysql://localhost:3307/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true&serverTimezone=Asia/Shanghai
  21. username: username
  22. password: password
  23. driver: com.mysql.jdbc.Driver

excel导入数据规范

  • 正式的数据从第二个 sheet 页开始,每页 从 D7 单元格开始有效
  • 同一个表的数据要连续,中间不能有空行
  • Sheet页的名字不要包含空格,中文

  • 请给特殊单元格,列名添加颜色,提高数据可读性

  • 理论上,表的前后顺序,sheet 页的顺序没有严格要求,但请尽量按照先插 后引用的顺序排列,减少迭代次数!

  • 列名格式举例

列名格式举例说明备注
ROLE_CODE普通
USER_ID前置, 该列的值自动生成,当数据库存在等价记录时,这个值会被替换为数据库中已存在的值自增长(或序列)主键列.当不作为外键引用时,一般写作为外键时,写可读的值
#USER_NAME#前置,表中所有带有#的列组成一个唯一性校验,在执行插入之前,会首先按照唯一键来检查数据库是否存在等价记录可以有多列.仅支持数字,字符串;当#列涉及到公式时,会先确定公式的值”
UNIT_PRICE(DECIMAL)(TYPE)指定这一列的类型,默认会自动检测:_ID结尾为数字;_DATE 结尾为日期;其他默认为VARCHAR一般不需要指定.日期格式仅支持:yyyy-MM-dd HH:mm:ss;yyyy-MM-dd
ROLE_NAME:zh_CN:LANG 指定语言环境TL 表数据不需要专门写
外键引用(公式)用于引用外键,也可用于普通值;目前不支持特别复杂的公式自动增长列,如果被公式引用,最好写一个人可以读懂的值,增强公式可读性
  • 关于公式的说明
举例含义
E9相对引用当前页 E9 单元格
$E$9绝对引用当前页 E9 单元格
RESOURCE!E23引用 RESOURCE 页的 E23 单元格(相对)
RESOURCE!$E$23引用 RESOURCE 页的 E23 单元格(绝对)

注意事项

排除更新的excel中表和列

在service-mapping.xml中添加

  1. <!-- 排除更新的表和列(不带列标识忽略整个表)以逗号分隔 -->
  2. <exclusion>
  3. hpfm_tenant.tenant_id
  4. </exclusion>

初始化依赖jar中的数据

installer.jarPath.init=true 所有依赖jar包中的groovy和excel文件不能重名,根据jar包解析顺序,后面解析的文件会直接覆盖直接的文件,最后一个被读取的文件生效。

更多配置参考hzero-installer

hzero-installer