暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【金仓数据库征文】Nacos+MyBatis-Plus双栈适配金仓实战——微服务信创改造全记录

原创 曾云林 2026-07-24
653

一、微服务

做了DBA好多年了,信创改造的项目做了不少。但这次的项目有点特殊——不是迁一个业务系统,而是迁整个微服务架构的底座。我们单位的微服务体系是基于Spring Cloud + Nacos搭的,Nacos用MySQL做后端存储。这次信创改造,要求所有组件的数据库都得换成金仓。外包团队拿到需求之后直接懵了:Nacos官方只支持MySQL、derby、postgresql,没听说能接金仓啊?我一听,这事儿没那么难。Nacos底层是用DataSource连数据库的,本质上就是个JDBC连接。金仓有MySQL兼容模式,理论上把驱动换成金仓的、连接串改一改,说不定就能跑起来。
说干就干。我拉了个测试环境,从Nacos插件适配、驱动替换、参数配置,到业务层MyBatis-Plus接入,前前后后踩了几周的坑,终于把整套微服务底座从MySQL平滑迁到了金仓上。

这篇文章就是全过程的实战记录。Nacos怎么接金仓、MyBatis-Plus怎么配、连接池怎么调、动态配置怎么管理,全是干货,代码截图加源码。

先交代环境:

  • 数据库:KingbaseES V9R3C18 MySQL兼容版
  • 端口:54321
  • 驱动:com.kingbase8.Driver
  • Java版本:JDK 1.8
  • Spring Boot:2.7.x
  • Spring Cloud:2021.0.x
  • Nacos:2.2.x
  • MyBatis-Plus:3.5.x(v3.3.0+官方支持金仓)

二、Nacos适配金仓实战

2.1 原理说明

先讲清楚原理,免得大家觉得玄乎。

Nacos本身支持多种数据库,通过spring.sql.init.platform参数来区分不同的数据库方言。每种数据库对应一套初始化SQL脚本和特定的SQL语句。

金仓的MySQL兼容模式,顾名思义,就是在SQL语法、函数、行为上尽量和MySQL保持一致。那Nacos能不能用金仓呢?答案是可以的,但要注意几个关键点:

  1. 驱动要换成金仓的 — 不能用MySQL的com.mysql.cj.jdbc.Driver
  2. 连接串前缀要改jdbc:kingbase8://而不是jdbc:mysql://
  3. 初始化脚本要适配 — Nacos自带的MySQL脚本大部分能跑,但有几个地方要改
  4. 方言要处理 — Nacos内部有些SQL是MySQL特有的,需要适配

好消息是,Nacos 2.x版本支持通过插件扩展数据源方言,金仓可以用插件方式接入。下面一步步来。

2.2 金仓数据库准备

先在金仓里创建Nacos专用的数据库和用户:

-- 创建数据库(MySQL兼容模式) CREATE DATABASE nacos_config OWNER system; -- 连接到nacos_config数据库后执行 -- 创建专用用户 CREATE USER nacos WITH PASSWORD 'nacos_123456'; GRANT ALL PRIVILEGES ON DATABASE nacos_config TO nacos; GRANT ALL ON SCHEMA public TO nacos;

踩坑记录1:数据库模式

金仓创建数据库时,可以指定兼容模式。如果你是用MySQL兼容模式创建的金仓实例,那建出来的库默认就是MySQL兼容的。如果不是,可能需要手动设置:

ALTER DATABASE nacos_config SET sql_mode = 'mysql';

或者在连接串里加参数。这个一定要确认好,不然后面各种语法报错。

2.3 Nacos MySQL脚本迁移

Nacos的MySQL脚本在nacos/conf/mysql-schema.sql里。我们基于这个脚本改出金仓版。

我把主要需要修改的地方列出来:

-- ============================================================ -- Nacos 金仓版初始化脚本(基于MySQL脚本修改) -- 适用于 KingbaseES V9R3C18 MySQL兼容模式 -- ============================================================ -- 配置表 CREATE TABLE config_info ( id BIGSERIAL PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) DEFAULT NULL, content TEXT NOT NULL, md5 VARCHAR(32) DEFAULT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user TEXT, src_ip VARCHAR(50) DEFAULT NULL, app_name VARCHAR(128) DEFAULT NULL, tenant_id VARCHAR(128) DEFAULT '', c_desc VARCHAR(256) DEFAULT NULL, c_use VARCHAR(64) DEFAULT NULL, effect VARCHAR(64) DEFAULT NULL, type VARCHAR(64) DEFAULT NULL, c_schema TEXT, encrypted_data_key TEXT DEFAULT '' ); CREATE UNIQUE INDEX uk_configinfo_datagrouptenant ON config_info(data_id, group_id, tenant_id); CREATE INDEX idx_configinfo_gmt_create ON config_info(gmt_create); CREATE INDEX idx_configinfo_gmt_modified ON config_info(gmt_modified);

主要改动点:

  1. BIGINT NOT NULL AUTO_INCREMENTBIGSERIAL(金仓用序列实现自增)
  2. DATETIMETIMESTAMP(金仓推荐用TIMESTAMP)
  3. DEFAULT CURRENT_TIMESTAMP 保留(MySQL兼容模式支持)
  4. ENGINE=InnoDBCHARSET=utf8mb4 这些MySQL特有属性去掉
  5. TEXT类型保留(金仓支持)

Nacos总共有十多张表,核心的几张:config_infoconfig_info_aggrconfig_info_betaconfig_info_tagconfig_tags_relationhis_config_infopermissionsrolesuserstenant_infotenant_capacitygroup_capacity

每张表都按照上面的规则改就行,主要就是自增主键和存储引擎这两处。

2.4 Nacos单机版配置金仓数据源

如果你是部署Nacos服务端,改application.properties

image.png

# ================================================================ # Nacos 金仓数据源配置 # ================================================================ # 使用外置数据库 spring.sql.init.platform=kingbase # 数据源配置 spring.datasource.platform=kingbase db.num=1 # 第0个数据库 db.url.0=jdbc:kingbase8://127.0.0.1:54321/nacos_config?currentSchema=public&characterEncoding=utf8&useSSL=false db.user.0=system db.password.0=123456 # 连接池配置 db.pool.config.driver-class-name=com.kingbase8.Driver db.pool.config.maximum-pool-size=20 db.pool.config.minimum-idle=5 db.pool.config.connection-timeout=30000 db.pool.config.idle-timeout=600000 db.pool.config.max-lifetime=1800000 db.pool.config.connection-test-query=SELECT 1

踩坑记录2:platform参数

Nacos的spring.sql.init.platform是用来指定数据库类型的,它会根据这个值去找对应的初始化脚本。但Nacos自带的脚本里没有kingbase这个类型。

所以你有两个选择:

  1. 方案A:手动执行上面改好的金仓版脚本,然后关闭自动初始化(spring.sql.init.mode=never
  2. 方案B:写一个Nacos插件,扩展kingbase方言(推荐,更规范)

生产环境我推荐方案A+方案B结合:手动建表(可控)+ 插件扩展运行时SQL适配。

2.5 Nacos客户端配置金仓(业务服务侧)

上面是Nacos服务端接金仓,下面是业务服务通过Nacos客户端拿配置,然后业务库用金仓的场景。这是更常见的用法——Nacos存配置,业务数据存金仓。

Maven依赖:

image.png

<dependencies> <!-- Nacos 服务发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Nacos 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- 金仓驱动 --> <dependency> <groupId>cn.com.kingbase</groupId> <artifactId>kingbase8</artifactId> <version>8.6.0</version> </dependency> <!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency> </dependencies>

2.6 Nacos配置中心管理金仓数据源配置

这是微服务架构下最经典的用法——数据库连接信息不写在本地配置文件里,统一放到Nacos配置中心管理。

bootstrap.yml(本地只有Nacos连接信息):

image.png

spring: application: name: user-service cloud: nacos: # Nacos服务地址 server-addr: 127.0.0.1:8848 # 配置中心 config: server-addr: 127.0.0.1:8848 file-extension: yaml namespace: dev group: DEFAULT_GROUP # 共享配置 shared-configs: - data-id: common-datasource.yaml group: DEFAULT_GROUP refresh: true # 服务发现 discovery: server-addr: 127.0.0.1:8848 namespace: dev group: DEFAULT_GROUP

然后在Nacos配置中心里建一个common-datasource.yaml,内容是金仓数据源配置:

image.png

# Nacos配置中心 - 公共数据源配置 # 所有微服务共享这一套数据库连接信息 spring: datasource: driver-class-name: com.kingbase8.Driver url: jdbc:kingbase8://127.0.0.1:54321/biz_db?currentSchema=public&characterEncoding=utf8&useSSL=false username: system password: 123456 hikari: pool-name: KingbaseHikariCP minimum-idle: 5 maximum-pool-size: 30 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 connection-test-query: SELECT 1 leak-detection-threshold: 60000

好处显而易见:

  1. 配置集中管理 — 所有微服务的数据库连接信息统一在Nacos里维护
  2. 动态刷新 — 改了密码、换了地址,不用重启服务,Nacos推送一下就生效
  3. 环境隔离 — 不同namespace对应不同环境(dev/test/prod),各用各的库
  4. 灰度发布 — 可以用配置灰度切换不同的数据库连接

三、MyBatis-Plus集成金仓实战

3.1 基础配置

MyBatis-Plus从v3.3.0开始正式支持金仓,这个是重点。不用自己写方言类了,开箱即用。

image.png

# Nacos配置中心的mybatis-plus配置 mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml type-aliases-package: com.example.user.entity configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl global-config: db-config: id-type: auto # 自增主键(金仓BIGSERIAL) logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0

配置类:

image.png

package com.example.user.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 - 金仓方言 // 划重点:DbType.KINGBASE_ES,v3.3.0+支持 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.KINGBASE_ES)); // 乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }

3.2 实体类与Mapper

image.png

package com.example.user.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.time.LocalDateTime; @Data @TableName("sys_user") public class SysUser { @TableId(type = IdType.AUTO) private Long id; private String username; private String password; private String realName; private String email; private String phone; private Integer status; /** 所属部门ID */ private Long deptId; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @TableLogic private Integer deleted; }

image.png

package com.example.user.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.user.entity.SysUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface SysUserMapper extends BaseMapper<SysUser> { /** * 根据部门ID查询用户列表 * 自定义SQL示例 */ List<SysUser> selectByDeptId(@Param("deptId") Long deptId); }

对应的XML:

image.png

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.user.mapper.SysUserMapper"> <resultMap id="BaseResultMap" type="com.example.user.entity.SysUser"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="real_name" property="realName"/> <result column="email" property="email"/> <result column="phone" property="phone"/> <result column="status" property="status"/> <result column="dept_id" property="deptId"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> </resultMap> <select id="selectByDeptId" resultMap="BaseResultMap"> SELECT id, username, real_name, email, phone, status, dept_id, create_time, update_time FROM sys_user WHERE dept_id = #{deptId} AND deleted = 0 ORDER BY id </select> </mapper>

3.3 自动填充字段配置

image.png

package com.example.user.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "deleted", Integer.class, 0); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }

3.4 Nacos动态配置 + 多数据源实战

生产环境经常需要多数据源——业务库一个、日志库一个、报表库一个。配合Nacos动态配置,可以做到运行时切换数据源。

image.png

package com.example.user.config; import com.zaxxer.hikari.HikariDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration public class DataSourceConfig { @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Bean @Primary @RefreshScope // 支持Nacos配置动态刷新 public DataSource dataSource() { HikariDataSource ds = new HikariDataSource(); ds.setJdbcUrl(dbUrl); ds.setUsername(username); ds.setPassword(password); ds.setDriverClassName(driverClassName); ds.setMaximumPoolSize(30); ds.setMinimumIdle(5); ds.setConnectionTimeout(30000); ds.setIdleTimeout(600000); ds.setMaxLifetime(1800000); ds.setConnectionTestQuery("SELECT 1"); ds.setPoolName("KingbaseHikariCP"); return ds; } }

注意: @RefreshScope配合Nacos的自动刷新功能,配置变了数据源会重建。但生产环境要谨慎——数据源重建期间正在执行的SQL可能报错。一般建议改完配置之后手动滚动重启服务更稳妥。

3.5 常见问题与排查

问题一:分页查询报错

  • 现象:ERROR: syntax error at or near "LIMIT"
  • 原因:方言没配对,生成的分页SQL不对
  • 解决:确认PaginationInnerInterceptor里指定的是DbType.KINGBASE_ES,并且MyBatis-Plus版本在v3.3.0以上

问题二:自增主键回填失败

  • 现象:插入数据后,实体类的id字段还是null
  • 原因:主键策略配置不对
  • 解决:
    1. 数据库字段类型是BIGSERIAL或者SERIAL
    2. 实体类@TableId(type = IdType.AUTO)
    3. 不要用IdType.INPUT

问题三:||拼接字符串返回布尔值

  • 现象:SELECT a || b FROM t返回tf,不是拼接后的字符串
  • 原因:MySQL兼容模式下||是逻辑或
  • 解决:用CONCAT()函数替代

这个坑我真的数不清踩了多少次了。写代码的时候习惯用||,一到金仓MySQL兼容模式就出问题。现在我写SQL之前,都会下意识检查有没有||

问题四:事务不生效

  • 现象:加了@Transactional注解,出错了数据还是插进去了
  • 排查:
    1. 方法是不是public的?(Spring AOP的老问题)
    2. 是不是同一个类里调用的?(自调用不走代理)
    3. 异常是不是RuntimeException?(默认只回滚RuntimeException和Error)
    4. 数据库引擎是不是支持事务?(金仓默认支持,不用担心)

四、连接池调优实战

4.1 HikariCP参数详解

微服务架构下,每个服务都有自己的连接池,连接池配置不合理,轻则性能差,重则数据库被打挂。

核心参数:

参数 默认值 推荐值 说明
maximum-pool-size 10 15-30 最大连接数,不是越大越好
minimum-idle 10 5-10 最小空闲连接,建议比max小一点
connection-timeout 30000 30000 获取连接超时,毫秒
idle-timeout 600000 600000 空闲连接存活时间,10分钟
max-lifetime 1800000 1800000 连接最大生命周期,30分钟
connection-test-query SELECT 1 连接测试SQL,金仓支持
leak-detection-threshold 0 60000 连接泄漏检测阈值,毫秒

4.2 连接池大小怎么定

微服务场景下,连接池大小的计算要更谨慎,因为服务多啊。

假设你有10个微服务,每个服务最大20个连接,那就是200个连接。金仓默认的max_connections可能是100,这就不够了。

计算公式:

数据库总连接数需求 = 服务实例数 × 每个实例最大连接数 × 预留系数(1.2)

比如10个服务,每个服务3个实例,每个实例最大20连接:

10 × 3 × 20 × 1.2 = 720

金仓的max_connections就要设到800以上才保险。

但注意: 连接数不是越多越好。金仓每个连接都是一个进程,连接数太多会占用大量内存,操作系统进程调度开销也大。我一般建议单实例连接数控制在500-1000之间,再多就要考虑读写分离或者分库了。

4.3 生产环境监控

Nacos + Spring Boot Actuator + Micrometer,监控数据直接进Prometheus + Grafana:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
# Nacos配置中心的监控配置 management: endpoints: web: exposure: include: 'prometheus,health,info,metrics' metrics: tags: application: ${spring.application.name}

Grafana看板上盯紧这几个指标:

  • hikaricp_connections_active — 活跃连接数
  • hikaricp_connections_idle — 空闲连接数
  • hikaricp_connections_pending — 等待连接的线程数
  • hikaricp_connection_acquired_nanos — 获取连接耗时

pending一直大于0,说明连接池不够用了,要么调大连接数,要么优化SQL。


五、Nacos + 金仓生产部署最佳实践

5.1 高可用架构

生产环境Nacos不能单点,金仓也不能单点。推荐架构:

┌─────────────┐
           │   负载均衡   │
           └──────┬──────┘
                  │
        ┌─────────┴─────────┐
        │                   │
   ┌────┴────┐         ┌────┴────┐
   │ Nacos-1 │         │ Nacos-2 │  ... 3节点以上
   └────┬────┘         └────┬────┘
        │                   │
        └─────────┬─────────┘
                  │
           ┌──────┴──────┐
           │  金仓集群    │  ← 主备集群/读写分离
           └─────────────┘

Nacos集群部署的时候,每个节点都连同一个金仓库(或者金仓集群的VIP)。这样Nacos节点之间数据通过数据库同步,天然一致。

5.2 配置权限管理

Nacos的权限数据存在金仓的usersrolespermissions表里。生产环境建议:

  1. 开启Nacos鉴权 — 不能谁都能改配置
  2. 数据库账号最小权限 — Nacos专用的数据库账号,只给nacos_config库的权限
  3. 配置加密 — 数据库密码这种敏感配置,在Nacos里要加密存储

Nacos配置加密的方式:

# 自定义加密数据源密码 # 不用明文写在配置里,通过自定义解密逻辑处理 spring: datasource: url: jdbc:kingbase8://xxx:54321/xxx username: ENC(加密后的用户名) password: ENC(加密后的密码)

配合jasypt或者自定义的EnvironmentPostProcessor来解密。

5.3 灰度发布与配置回滚

Nacos配置中心最大的好处就是配置可以动态推送,但也带来了风险——配错了直接线上炸。

最佳实践:

  1. 配置版本管理 — Nacos自带历史版本功能,改配置之前先看历史
  2. 灰度发布 — 先在一台机器上验证,没问题再全量推
  3. 一键回滚 — 出了问题直接回滚到上一个版本
  4. 变更审批 — 生产环境配置修改走审批流程

5.4 Nacos插件扩展金仓支持(进阶)

如果你想更规范地支持金仓,可以开发一个Nacos数据源插件。Nacos 2.x提供了插件扩展机制,可以自定义DataSourceDialect。

思路:

  1. 实现DataSourceDialect接口,金仓版
  2. 把金仓特有的SQL语句写在里面
  3. 打包成插件,放到Nacos的plugins目录
  4. 启动时-Dnacos.plugin.datasource.type=kingbase指定

具体代码量不小,这里就不展开了。有兴趣的可以去Nacos官方文档看插件开发指南。一般场景下,用MySQL模式兼容就够了,不用搞这么复杂。


六、开发大赛心得

6.1 心得

说实话,最开始我想选的是纯数据库优化方向,毕竟那是我的老本行,写起来轻车熟路。但后来一想,信创改造哪有只迁数据库的?都是整个技术栈一起迁。

Nacos是微服务架构的核心组件,注册中心、配置中心,全靠它。如果Nacos接不上金仓,那整个微服务体系的信创改造就是空谈。这个题目虽然不是最"数据库"的,但绝对是最实用的。

6.2 技术收获

第一,对Nacos底层原理理解更深了。 以前就是用用,知道怎么配、怎么发配置。这次为了适配金仓,把Nacos的数据源模块源码翻了个遍——初始化逻辑怎么写的、SQL语句放在哪、方言怎么扩展、插件机制怎么回事,全都搞明白了。

第二,金仓MySQL兼容模式的边界更清晰了。 以前只知道"兼容MySQL",但兼容到什么程度?哪些语法支持、哪些不支持、哪些行为不一样?这次适配完Nacos十几张表、上百条SQL,心里有底了。大部分常用SQL都没问题,主要就是自增主键、||运算符、少数特有函数这几个地方要注意。

第三,微服务全链路信创改造的思路打开了。 以前觉得信创就是换个数据库,现在发现从注册中心、配置中心、网关、业务服务、消息队列,每一层都要适配。有了Nacos适配的经验,后面其他组件的适配就有思路了。

6.3 踩坑感悟

做微服务相关的东西,最大的感受就是——数据库不再是孤立的了。

以前做DBA,管好库里那点事就行:SQL写得好不好、索引建得对不对、参数调得优不优。现在微服务架构下,数据库是整个链路的一环。上游有多少个服务、每个服务连接池多大、峰值QPS多少、慢查询会不会拖垮整个链路,这些都得考虑。

举个例子,以前一个慢查询最多影响当前业务。现在微服务架构下,一个慢查询占着连接不放,连接池满了,其他请求全在等,级联下去可能整个服务都雪崩了。所以DBA的视角也要升级——不能只看数据库,要从整个系统链路来看。

还有一个感悟就是——开源生态太重要了。MyBatis-Plus官方支持金仓,用起来就省心;Nacos官方不支持,就得自己摸。一个数据库好不好用,除了本身的性能和稳定性,生态完善不完善也很关键。

6.4 对金仓生态的建议

掏心窝子说几句:

  1. Nacos官方插件安排一下。 现在微服务太普遍了,Nacos几乎是标配。如果金仓官方能出个Nacos的适配插件,开发者拿来就能用,能省很多事。
  2. Spring Cloud Alibaba全家桶适配。 除了Nacos,还有Sentinel、Seata、Gateway这些组件,如果金仓能官方适配一遍,信创改造的门槛就低多了。
  3. 出一套"信创改造迁移指南"。 不是那种功能对比表,而是实打实的——MySQL迁金仓,常用框架怎么改、常见坑有哪些、优化参数有哪些。有了这套指南,团队迁移的时候就不用一个个坑去踩了。
  4. 和主流开源社区多互动。 MyBatis-Plus支持金仓是个很好的开始。希望能看到更多的开源项目官方支持金仓,这样开发者选金仓的时候心里更有底。

七、总结

从最开始的"Nacos能接金仓吗?"这个疑问,到最后把整套微服务底座稳稳地跑在金仓上,前前后后花了很多时间。中间踩了不少坑,但每解决一个坑,对金仓的信心就多一分。

总体来说,金仓的MySQL兼容模式做得相当不错。Nacos这么复杂的系统,十几张表、上百条SQL,改一改脚本、换一换驱动,基本上就能跑起来。对于大多数业务系统来说,迁移成本比想象的低很多。

再加上MyBatis-Plus从v3.3.0开始官方支持金仓,开发层的体验又上了一个台阶。分页、逻辑删除、乐观锁、批量操作,这些常用功能全都开箱即用。

微服务信创改造这条路,走通了。Nacos做配置中心和注册中心,金仓做数据存储,MyBatis-Plus做ORM层,整套技术栈稳定可靠。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论