- Java 100%
| .gitea/workflows | ||
| docker | ||
| src | ||
| target | ||
| .flattened-pom.xml | ||
| DIAGNOSIS-SQL-NOT-TRANSFORMED.md | ||
| FINAL-SOLUTION-BEAN-FACTORY-POST-PROCESSOR.md | ||
| pom.xml | ||
| README.md | ||
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 |
目标数据库类型,支持 mysql 或 kingbase |
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.sqlV2__add_user_table.sqlV241201.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:
- 优先从 URL 获取:解析
currentSchema参数 - 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
原因:表已存在(可能是之前部分执行导致的)
解决方案:
- 清理 Flyway 历史记录:
DELETE FROM flyway_schema_history; - 或者使用
baseline-on-migrate: true让 Flyway 创建基准线
9.2 Q: 迁移失败,提示 column does not exist
原因:脚本执行顺序错误,依赖的表还未创建
解决方案:
- 检查脚本版本号,确保依赖脚本版本号较小
- 或者将依赖的表创建语句移到单独的迁移脚本中
9.3 Q: SQL 转换不完整
原因:某些 MySQL 特有语法未被转换
解决方案:
- 检查是否使用了通配符
**:locations: classpath:db/** - 确认
log-level: debug查看详细转换日志 - 如有遗漏,可在社区反馈
9.4 Q: dynamic-schema 无法获取 Schema
原因:数据库连接 URL 中没有 currentSchema 参数
解决方案:
- 在 URL 中添加参数:
jdbc:kingbase8://host:port/db?currentSchema=your_schema - 或者配置
default-schema为固定值
十、版本信息
- 组件版本:1.0.0
- MySQL 驱动:8.0.33
- Kingbase 驱动:8.6.0
- MyBatis-Plus:3.5.3.1
- Flyway:8.5.13-persagy-SNAPSHOT
- Druid:1.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}';
-- 拷贝查询到的结果并执行即可