No description
Find a file
2026-06-08 19:08:05 +08:00
.gitea/workflows ci: 修正克隆仓库地址 my-first-app -> paas-sq-interceptor 2026-06-08 19:08:05 +08:00
docker chore: 添加 Maven 镜像配置 docker/settings.xml 2026-06-08 19:03:40 +08:00
src docs: 新增架构与代码深度分析报告 2026-06-08 19:00:30 +08:00
target 注释 info/debug 日志,保留 error/warn 日志 2026-05-20 09:39:02 +08:00
.flattened-pom.xml feat: paas-sql-interceptor 1.0.0 - SQL拦截转换组件,支持MySQL到Kingbase语法转换 2026-04-24 20:09:04 +08:00
DIAGNOSIS-SQL-NOT-TRANSFORMED.md feat: 添加SQL转换规则到paas-sql-interceptor组件 2026-05-08 18:11:53 +08:00
FINAL-SOLUTION-BEAN-FACTORY-POST-PROCESSOR.md feat: 添加SQL转换规则到paas-sql-interceptor组件 2026-05-08 18:11:53 +08:00
pom.xml docs: 新增架构与代码深度分析报告 2026-06-08 19:00:30 +08:00
README.md feat: 添加SQL转换规则到paas-sql-interceptor组件 2026-05-08 18:11:53 +08:00

paas-sql-interceptor 集成文档

一、组件简介

paas-sql-interceptor 是用于 MySQL 到 Kingbase 数据库迁移的 SQL 拦截转换组件,提供以下核心功能:

  • SQL 语法转换:自动将 MySQL 特有语法转换为 Kingbase 兼容语法
  • Flyway 集成:支持 Flyway 数据库迁移脚本的自动转换和执行
  • 动态 Schema:支持从数据库连接中动态获取 Schema 配置
  • Spring Boot Starter:开箱即用的 Spring Boot 自动装配

二、Maven 依赖配置

2.1 添加仓库地址

如果私有仓库未配置,需要在 pom.xml 中添加仓库配置:

<repositories>
    <repository>
        <id>persagy2021-yushu-public</id>
        <name>public</name>
        <url>https://persagy2021-maven.pkg.coding.net/repository/yushu/public/</url>
    </repository>
</repositories>

或者在 Maven settings.xml 中配置:

<mirrors>
    <mirror>
        <id>persagy2021-yushu-public</id>
        <mirrorOf>*</mirrorOf>
        <url>https://persagy2021-maven.pkg.coding.net/repository/yushu/public/</url>
    </mirror>
</mirrors>

2.2 添加依赖

Kingbase注释掉mysql的flyway依赖增加以下

        <flyway.version>8.5.13-persagy-SNAPSHOT</flyway.version>
<dependency>
    <groupId>com.persagy</groupId>
    <artifactId>paas-sql-interceptor-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

·Mysql放开mysql的flyway依赖增加以下

<dependency>
    <groupId>com.persagy</groupId>
    <artifactId>paas-sql-interceptor-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <exclusions>
                <exclusion>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-core</artifactId>
                </exclusion>
            </exclusions>
</dependency>

三、application.yml 配置详解

注意Kingbase 驱动已在组件中声明为传递依赖,业务项目引入组件后会自动加载,无需单独配置。

# 数据源配置
spring:
  datasource:
    driver-class-name: com.kingbase8.Driver
    url: jdbc:kingbase8://host:54321/database?currentSchema=your_schema
    username: username
    password: password

# PaaS SQL Interceptor 配置
paas:
  sql:
    interceptor:
      enabled: true                    # 是否启用SQL拦截
      target-db: kingbase              # 目标数据库类型mysql 或 kingbase
      log-level: info                 # 日志级别trace, debug, info, warn, error
      performance-threshold: 1000     # 性能阈值毫秒超过此时间的SQL会记录警告
      performance-monitor-enabled: false  # 是否启用性能监控

      # Flyway 配置
      flyway:
        enabled: true                 # 是否启用 Flyway
        auto-initialize: true          # 启动时自动执行 Flyway 迁移
        locations: classpath:db       # 迁移脚本位置,支持通配符如 classpath:db/**
        sql-migration-prefix: V       # SQL 文件版本前缀
        sql-migration-separator: __    # 版本号与描述之间的分隔符
        sql-migration-suffixes: .sql   # 迁移文件后缀
        encoding: UTF-8               # SQL 文件编码
        baseline-on-migrate: true     # 迁移前是否创建基准线
        validate-on-migrate: true      # 迁移前是否验证
        out-of-order: false            # 是否允许乱序执行
        # default-schema: your_schema   # 默认Schema可省略使用 dynamic-schema
        dynamic-schema: true           # 是否使用动态Schema从数据库连接URL获取

# 日志配置(可选)
logging:
  level:
    com.persagy: debug               # 组件日志级别
    org.flywaydb: info               # Flyway 日志级别

3.2 配置项详细说明

3.2.1 核心配置 (paas.sql.interceptor)

配置项 类型 默认值 说明
enabled boolean false 是否启用 SQL 拦截功能
target-db string mysql 目标数据库类型,支持 mysqlkingbase
log-level string info 日志级别:trace, debug, info, warn, error
performance-threshold long 1000 性能阈值(毫秒),超过此时间的 SQL 会记录警告日志
performance-monitor-enabled boolean false 是否启用性能监控功能

3.2.2 Flyway 配置 (paas.sql.interceptor.flyway)

配置项 类型 默认值 说明
enabled boolean false 是否启用 Flyway 迁移功能
auto-initialize boolean false 启动时是否自动执行 Flyway 迁移
locations string classpath:db 迁移脚本位置,支持 classpath:filesystem: 前缀
sql-migration-prefix string V SQL 迁移文件版本前缀,如 V1__xxx.sql
sql-migration-separator string __ 版本号与描述之间的分隔符
sql-migration-suffixes string .sql 迁移文件后缀,多个后缀用逗号分隔
encoding string UTF-8 SQL 文件编码格式
baseline-on-migrate boolean true 当 Schema 非空时,是否自动创建基准线
validate-on-migrate boolean true 执行迁移前是否验证脚本
out-of-order boolean false 是否允许乱序执行(跳过已执行的版本)
default-schema string "" 默认 Schema 名称,留空则使用动态获取
dynamic-schema boolean false 是否从数据库连接 URL 自动获取 Schema

四、SQL 转换规则

组件自动将 MySQL 特有语法转换为 Kingbase 兼容语法,转换规则如下:

4.1 GIS 空间函数转换

MySQL/原始语法 Kingbase 语法 说明
ST_ public.ST_ GIS 函数添加 public 前缀
MULTIPOLYGON public.geometry(MULTIPOLYGON,0) 几何类型转换
MULTILINESTRING public.geometry(MULTILINESTRING,0) 几何类型转换
POINT public.geometry(POINT,0) 几何类型转换
LINESTRING public.geometry(LINESTRING,0) 几何类型转换
POINT(...) POINT(...)::public.geometry 点坐标转换
LINESTRING(...) public.ST_MakeLine(...) 线串转换

4.2 JSON 函数转换

MySQL/原始语法 Kingbase 语法 说明
JSON_UNQUOTE(JSON_EXTRACT(col, path)) col->>path JSON 提取转换
JSON_EXTRACT(col, path) col->>path JSON 提取简化
json_extract(infos, '$.isIot') = json_extract(...)::int = JSON 布尔值比较
JSON_EXTRACT(..., jsonpath) JSON_EXTRACT(...)::jsonpath JSONPath 类型转换
dto.infos->>'$.outline' regexp_replace(..., '\\\\', '', 'g') 转义字符处理
JSON_EXTRACT(regexp_replace(...)) JSON_EXTRACT(...)::json 嵌套函数处理
json_overlaps(col->>path) json_overlaps(col->path) JSON 重叠比较
json_overlaps(class_codes) json_overlaps(class_codes::json) JSON 类型转换
JSON_TABLE(data, ...) JSON_TABLE(data::jsonb, ...) JSON 表函数(不含 regexp_replace
field LIKE CONCAT(...) CAST(field AS text) LIKE CONCAT(...) JSON 字段 LIKE 操作

4.3 Visitor 函数转换

MySQL 函数 Kingbase 函数 说明
JSON_EXTRACT JSON_UNQUOTE(JSON_EXTRACT(...)) 自动添加 JSON_UNQUOTE 包装
JSON_EXTRACT IS NULL JSON_VALUE IS NULL IS NULL 场景转换
JSON_CONTAINS(col, JSON_UNQUOTE(JSON_ARRAY(...))) JSON_CONTAINS(col, JSON_ARRAY(...)) 移除多余的 JSON_UNQUOTE
JSON_OVERLAPS JSON_CONTAINS JSON 重叠函数转换
COALESCE(JsonExpression, default) COALESCE(CAST(JsonExpression AS int), default) 根据默认值类型添加类型转换
-> (JSON操作符) ->> JSON 操作符转换

4.4 通用函数转换

MySQL/原始语法 Kingbase 语法 说明
UUID() / uuid() SYS_GUID() UUID 生成函数
LENGTH(JSON_EXTRACT(...)) LENGTH(...)::varchar) JSON 长度计算
replace(uuid(), '-', '') replace(SYS_GUID(), '-', '') UUID 去横杠

4.5 数据类型转换

MySQL 类型 Kingbase 类型 说明
double(50,2) DECIMAL(50,2) 高精度数值转换
tinyint(1) smallint 布尔类型转换
tinyint unsigned tinyint 无符号类型转换
datetime timestamp 日期时间类型

4.6 DDL 语法转换

MySQL 语法 Kingbase 语法 说明
ENGINE=InnoDB (移除) 存储引擎声明
DEFAULT CHARSET=utf8mb4 (移除) 字符集声明
COLLATE=utf8mb4_general_ci (移除) 排序规则
CHARACTER SET utf8mb4 (移除) 字符集设置
COLLATE utf8mb4_general_ci (移除) 排序规则
ROW_FORMAT=DYNAMIC (移除) 行格式
COMMENT='...' (移除) 注释
INSERT IGNORE INTO INSERT INTO ... ON CONFLICT DO NOTHING 忽略重复插入

4.7 自增主键

MySQL 语法 Kingbase 语法
AUTO_INCREMENT GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1)

4.8 表创建

MySQL 语法 Kingbase 语法 说明
CREATE TABLE ... LIKE ... CREATE TABLE ... AS SELECT ... WHERE 1=0 复制表结构

4.9 索引操作

MySQL 语法 Kingbase 语法
ALTER TABLE ... ADD INDEX ... CREATE INDEX ... ON ...
CREATE INDEX ... VISIBLE CREATE INDEX ... (移除 VISIBLE)

4.10 条件表达式转换

MySQL 语法 Kingbase 语法 说明
field = '' field IS NULL 空字符串判断
'$.businessEffectiveTime', ? '$.businessEffectiveTime', ?::text JSON 参数类型

4.11 表别名处理

原始语法 转换后 说明
) jt ) jt ON true JSON_TABLE 别名
) em ) em ON true JSON_TABLE 别名

4.12 Kingbase 关键字列表

组件会自动处理以下 Kingbase 保留关键字(添加反引号转义):

逻辑运算and, or, not, xor, any, all, some

比较运算is, null, true, false

查询语句select, from, where, group, having, order, limit, offset, fetch

数据操作insert, update, delete, into, values, set, returning

表操作create, table, column, constraint, primary, foreign, references, check, unique, default, deferrable, initially

权限控制grant, user, session_user, current_user, current_role

集合操作union, intersect, except, minus, distinct

窗口函数over, window, partition, order, row_number, rownum

层次查询connect, connect_by_iscycle, connect_by_isleaf, connect_by_root, prior, start, nocycle, sys_connect_by_path

日期时间current_date, current_time, current_timestamp, localtime, localtimestamp

其他as, asc, desc, case, when, then, else, end, if, do, for, while, loop, repeat, until, exit, return, placing, lateral, leading, trailing, symmetric, asymmetric, collate, level, on, only, online, recursive, variadic, using, with, array

4.13 转换规则统计

类别 数量
GIS 空间函数 7
JSON 函数 12
Visitor 函数 6
通用函数 3
数据类型 4
DDL 语法 8
条件表达式 2
表别名处理 2
Kingbase 关键字 87
总计 129

五、Flyway 迁移脚本示例

5.1 脚本命名规范

V{版本号}__{描述}.sql

示例:

  • V1__init_schema.sql
  • V2__add_user_table.sql
  • V241201.1__fm_work_order.sql

5.2 脚本示例

-- V1__init_schema.sql

-- 创建用户表
CREATE TABLE IF NOT EXISTS `sys_user` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    `username` varchar(50) NOT NULL COMMENT '用户名',
    `password` varchar(100) NOT NULL COMMENT '密码',
    `email` varchar(100) NULL COMMENT '邮箱',
    `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `is_deleted` bigint DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- 创建角色表
CREATE TABLE IF NOT EXISTS `sys_role` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID',
    `role_name` varchar(50) NOT NULL COMMENT '角色名称',
    `role_key` varchar(50) NOT NULL COMMENT '角色标识',
    `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `is_deleted` bigint DEFAULT 0 COMMENT '是否删除',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

执行后会自动转换为 Kingbase 兼容语法。

六、集成步骤

6.1 步骤一:添加依赖

在业务项目的 pom.xml 中添加依赖(参考第二章)

6.2 步骤二:配置数据源

spring:
  datasource:
    driver-class-name: com.kingbase8.Driver
    url: jdbc:kingbase8://172.19.0.40:54321/x-base?currentSchema=persagy_data_center
    username: SYSTEM
    password: your_password

6.3 步骤三:配置组件

paas:
  sql:
    interceptor:
      enabled: true
      target-db: kingbase
      flyway:
        enabled: true
        auto-initialize: true
        dynamic-schema: true

6.4 步骤四:放置迁移脚本

将 Flyway 迁移脚本放置在 src/main/resources/db/ 目录下:

src/
  main/
    resources/
      db/
        V1__init_schema.sql
        V2__add_tables.sql

6.5 步骤五:启动验证

启动项目,观察日志:

PaaS SQL Interceptor Spring Boot Starter 已初始化
========== SQL脚本转换开始 ==========
找到 2 个SQL文件
[SQL转换] 文件 V1__init_schema.sql 已转换
[SQL转换] 文件 V2__add_tables.sql 已转换
========== SQL脚本转换完成 ==========
Flyway实例创建成功!
Successfully applied 2 migrations to schema "persagy_data_center"

七、Flyway动态 Schema 配置详解

7.1 说明

在服务中db目录下创建kingbase文件夹后续读取脚本都从这个文件夹读取目录结构和flyway中的一样

具体区分mysql执行flyway文件夹kingbase执行kingbase文件夹

dynamic-schema: true 时,组件会从数据库连接 URL 中自动获取 Schema

  1. 优先从 URL 获取:解析 currentSchema 参数
  2. fallback 到数据库查询:执行 SELECT current_schema()

7.2 配置优先级

优先级 条件 Schema 来源
1 dynamic-schema: true 从数据库连接 URL 的 currentSchema 参数获取
2 default-schema 已配置 使用配置文件中指定的值
3 都未配置 使用数据库默认 Schema

7.3 配置示例

方式一:使用动态 Schema推荐

paas:
  sql:
    interceptor:
      flyway:
        dynamic-schema: true
        # 不需要配置 default-schema

方式二:使用固定 Schema

paas:
  sql:
    interceptor:
      flyway:
        dynamic-schema: false
        default-schema: persagy_data_center

7.4 切换mysql执行Flyway

可以用之前的依赖保持不变之需要剔除paas-sql中的flyway依赖即可

       
        <!-- PaaS SQL Interceptor 依赖排除自定义Flyway版本 -->
        <dependency>
            <groupId>com.persagy</groupId>
            <artifactId>paas-sql-interceptor-spring-boot-starter</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

第一种:

文件夹创建好后需要把sql脚本使用AI自行兼容完成然后根据目录放到kingbase文件夹中

# 增加配置指定kingbase执行的脚本路径
tenant.data.init.script-base-location=classpath:db/kingbase

使用AI转换

查询这个energy-ddp-server/src/main/resources/db/flyway/groupcode_billboard_report 这个目录下的V7.251101.0.0__init_table_data.sql  V7.251101.1.0__init_table_data.sql V7.251101.1.1__init_table_data.sql V7.251101.1.2__init_table_data.sql V7.251201.1.0__init_table_data.sql V7.260101.0.0__init_table_data.sql 这几个文件这几个是mysql的sql脚本 把这几个脚本转换成pgsql的脚本然后 复制到energy-ddp-server/src/main/resources/db/kingbase/groupcode_billboard_report 这个目录下 注意不要改源文件是指转换新增

第二种:

编译就把sql转换可以使用但是需要自行检查一下

这个就是之前flyway的记录不生效需要全部执行完之后把记录在拷贝到线上

这个因为是全部的脚本从0-1有转换出问题的风险

<plugin>
                <groupId>com.persagy</groupId>
                <artifactId>paas-sql-interceptor-compile-plugin</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <id>compile-flyway-sql</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>transform-flyway-sql</goal>
                        </goals>
                        <configuration>
                            <sourcePath>${project.basedir}/src/main/resources/db</sourcePath>
                            <outputPath>${project.build.directory}/classes/db</outputPath>
                            <enableGisSupport>true</enableGisSupport>
                            <enableJsonSupport>true</enableJsonSupport>
                            <enableDDLSupport>true</enableDDLSupport>
                            <targetDatabase>kingbase</targetDatabase>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

八、日志说明

8.1 关键日志标识

日志内容 含义
PaaS SQL Interceptor Spring Boot Starter 已初始化 组件加载成功
========== SQL脚本转换开始 ========== 开始转换 SQL 脚本
[SQL转换] 文件 xxx.sql 已转换 脚本转换成功
Successfully applied X migrations Flyway 迁移执行成功
PaaS SQL Interceptor Flyway 迁移执行完成 Flyway 迁移流程结束

8.2 日志级别配置建议

logging:
  level:
    com.persagy: debug           # 开发环境debug
    com.persagy: info           # 生产环境info
    org.flywaydb: warn          # 避免过多 Flyway 日志

九、常见问题

9.1 Q: 迁移失败,提示 relation already exists

原因:表已存在(可能是之前部分执行导致的)

解决方案

  1. 清理 Flyway 历史记录:DELETE FROM flyway_schema_history;
  2. 或者使用 baseline-on-migrate: true 让 Flyway 创建基准线

9.2 Q: 迁移失败,提示 column does not exist

原因:脚本执行顺序错误,依赖的表还未创建

解决方案

  1. 检查脚本版本号,确保依赖脚本版本号较小
  2. 或者将依赖的表创建语句移到单独的迁移脚本中

9.3 Q: SQL 转换不完整

原因:某些 MySQL 特有语法未被转换

解决方案

  1. 检查是否使用了通配符 **locations: classpath:db/**
  2. 确认 log-level: debug 查看详细转换日志
  3. 如有遗漏,可在社区反馈

9.4 Q: dynamic-schema 无法获取 Schema

原因:数据库连接 URL 中没有 currentSchema 参数

解决方案

  1. 在 URL 中添加参数:jdbc:kingbase8://host:port/db?currentSchema=your_schema
  2. 或者配置 default-schema 为固定值

十、版本信息

  • 组件版本1.0.0
  • MySQL 驱动8.0.33
  • Kingbase 驱动8.6.0
  • MyBatis-Plus3.5.3.1
  • Flyway8.5.13-persagy-SNAPSHOT
  • Druid1.2.8

十一、联系方式

如有集成问题或建议,请联系组件开发团队。


文档更新时间2026-04-27

关系数据库

============ mybatis-plus封装

  • 支持多数据源自动切换
  • 支持预置建库脚本
  • 提供树型内部码生成工具

说明

多数据源

  • 启用多数据源(默认为不启用)persagy.common.dynamic.enabled=true
  • 配置文件参考com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties
  • 配置文件示例
spring:
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      druid: #以下是支持的全局默认值
        initial-size:
        max-active:
        min-idle:
        max-wait:
        time-between-eviction-runs-millis:
        time-between-log-stats-millis:
        stat-sqlmax-size:
        min-evictable-idle-time-millis:
        max-evictable-idle-time-millis:
        test-while-idle:
        test-on-borrow:
        test-on-return:
        validation-query:
        validation-query-timeout:
        use-global-datasource-stat:
        async-init:
        clear-filters-enable:
        reset-stat-enable:
        not-full-timeout-retry-count:
        max-wait-thread-count:
        fail-fast:
        phyTimeout-millis:
        keep-alive:
        pool-prepared-statements:
        init-variants:
        init-global-variants:
        use-unfair-lock:
        kill-when-socket-read-timeout:
        connection-properties:
        max-pool-prepared-statement-per-connection-size:
        init-connection-sqls:
        share-prepared-statements:
        connection-errorretry-attempts:
        break-after-acquire-failure:
        filters: stat,wall # 注意这个值和druid原生不一致默认启动了stat,wall
        wall:
            noneBaseStatementAllow:
            callAllow:
            selectAllow:
            selectIntoAllow:
            selectIntoOutfileAllow:
            selectWhereAlwayTrueCheck:
            selectHavingAlwayTrueCheck:
            selectUnionCheck:
            selectMinusCheck:
            selectExceptCheck:
            selectIntersectCheck:
            createTableAllow:
            dropTableAllow:
            alterTableAllow:
            renameTableAllow:
            hintAllow:
            lockTableAllow:
            startTransactionAllow:
            blockAllow:
            conditionAndAlwayTrueAllow:
            conditionAndAlwayFalseAllow:
            conditionDoubleConstAllow:
            conditionLikeTrueAllow:
            selectAllColumnAllow:
            deleteAllow:
            deleteWhereAlwayTrueCheck:
            deleteWhereNoneCheck:
            updateAllow:
            updateWhereAlayTrueCheck:
            updateWhereNoneCheck:
            insertAllow:
            mergeAllow:
            minusAllow:
            intersectAllow:
            replaceAllow:
            setAllow:
            commitAllow:
            rollbackAllow:
            useAllow:
            multiStatementAllow:
            truncateAllow:
            commentAllow:
            strictSyntaxCheck:
            constArithmeticAllow:
            limitZeroAllow:
            describeAllow:
            showAllow:
            schemaCheck:
            tableCheck:
            functionCheck:
            objectCheck:
            variantCheck:
            mustParameterized:
            doPrivilegedAllow:
            dir:
            tenantTablePattern:
            tenantColumn:
            wrapAllow:
            metadataAllow:
            conditionOpXorAllow:
            conditionOpBitwseAllow:
            caseConditionConstAllow:
            completeInsertValuesCheck:
            insertValuesCheckSize:
            selectLimit:
        stat:
          merge-sql:
          log-slow-sql:
          slow-sql-millis: 
      datasource:
        master:
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic?characterEncoding=utf8&useSSL=false
          druid: # 以下是独立参数,每个库可以重新设置
            initial-size:
            validation-query: select 1 FROM DUAL #比如oracle就需要重新设置这个
            public-key: #(非全局参数)设置即表示启用加密,底层会自动帮你配置相关的连接参数和filter推荐使用本项目自带的加密方法。
#           ......

# 生成 publickey 和密码,推荐使用本项目自带的加密方法。
# java -cp druid-1.1.10.jar com.alibaba.druid.filter.config.ConfigTools youpassword

预置建库脚本

  • 参考配置
  • 脚本文件放在resources目录在默认数据源中增加配置
    spring:
      datasource:
        dynamic:
          primary: order
          datasource:
            order:
              # 基础配置省略...
              schema: db/order/schema.sql # 配置则生效,自动初始化表结构。
              data: db/order/data.sql # 配置则生效,自动初始化数据。
              continue-on-error: true # 默认true,初始化失败是否继续
              separator: ";" # sql默认分号分隔符一般无需更改
    
  • 注意事项:
    • schema 建立连接时会执行因此建表应使用CREATE TABLE IF NOT EXISTS确保不会重复创建。
    • data: 建立连接时会执行,应确保数据不会重复插入。

树型内部码工具

  • 可对实现ITreeEntity的model自动生成innerCode内部码。

自定义DB数据格式转换器

  • 放入此目录中即可: com.persagy.**.typehandler
  • json类型自动转换需要配置@TableName(value = "tableName", autoResultMap = true)和字段@TableField(typeHandler = JacksonTypeHandler.class)

最新变化

注意事项

字符集配置DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

  • 在建库语句中标记字符集,代码中的建表语句不出现字符集相关的语句(导出时如果有则手动清除)。
  • 字符集不一致修复sql
-- 数据库字符集修改
ALTER DATABASE `${schema}` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
-- 表字符集修改
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') 
  FROM information_schema.TABLES WHERE TABLE_SCHEMA = '${schema}';
-- 拷贝查询到的结果并执行即可