跳转到内容

Trantor 升级 0.6.x

主要改动点

  • Trantor 元信息部分重构,增强了对同一资源身份下不同模块资源的启用/禁用管理,业务无感知变更。
  • 交付控制台完全自举,老版下线。新版关闭了交付控制台的模型相关新增/修改操作,产品和交付过程中将重心移动到代码,所有开发和二次开发的动作在代码中完成,弱化了交付控制台在开发阶段的功能,便于项目团队管理二开内容,降低数据迁移成本。
  • 与 DS 协议变更为 dubbo

业务代码变动

  • maven 依赖升级
<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>api</artifactId>
<version>0.6.5-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.terminus.trantor</groupId>
<artifactId>framework</artifactId>
<version>0.6.5-SNAPSHOT</version>
</dependency>
  • application.yml 配置变化
spring:
profiles:
include: >
trantor
trantor:
mainModule: io.terminus.trantor.MyModuleDefinition

旧版 Trantor 相关配置都可以移除,作为代替,只需要配置一个 ModuleDefinitionclass 全名路径即可。

  • dice.yml 配置变化
# 增加 Zookeeper Addon, 具体参考其他已使用 addon
addons:
zk:
plan: "registercenter:basic"
options:
version: "1.0.0"

本地开发方式变动

06x 以后底座本地开发模式完全弃用,由 CLI + IDEA 插件替代。

  • CLI 详情
  • IDEA 插件还在开发中,暂时可以采用直接写文件的方式开发,由 CLI 动态加载资源到本地底座。

答疑方式变动

答疑现状是各项目各自拉群,Trantor 开发与技术支持入群的方式。目前存在比较严重的问题有以下几点

  • 各项目、开发对 Trantor 升级 / BugFix 情况信息不同步。
  • 技术支持轮班制,会出现很多重复答疑的现象。

因此目前准备逐步替换为大群统一答疑,个别针对问题再由技术支持统一路由。钉钉搜索 30287142 入群。

注意点

在 05x 中,Trantor 中的资源 key 规则发生了改变,并且在 06x 及以后的版本中会去掉兼容老 key 逻辑。 新旧 key 同时存在不仅增加了排查问题的难度,也会导致运行时性能降低。并且老 key 因为与现设计不符,会有同 key 冲突的风险。因此决定在 06x 这个版本推动更换。具体规则描述

下面是几个可能需要变更的地方:

  1. action 文件。

resources/trantor/resources/{moduleKey} 路径下的 -actions.json 后缀文件 image0.png以这个 action 为例,原 key 是 模块key_{key} image1.png 变更为 模型key_{key} image2.png

  1. view 文件。

同理,视图文件直接写 key 的地方也需要注意。 image3.png 如果在 controller 中存在直接调用某个固定 key 的地方,也需要相应修改。

主要改动集中在资源文件中直接引用到资源 key 的地方,可以使用编辑器提供的全局替换做变更。

  1. 另外 Trantor CLI 也提供了相关的迁移工具支持.
    1. 安装 CLI, 可参考 CLI安装
    2. 通过 Sequel Pro 执行 sql, 并导出成 JSON: 

select oldKey,resourceKey, modificationType, ‘View’ as type from meta_store__view where activated = 1 group by resourceKey union all select oldKey,resourceKey, modificationType, ‘Action’ as type from meta_store__action where activated = 1 group by resourceKey

c. 在项目资源目录下, 执行 trantor old-key-migration /xx/oldKey.json, 其中 oldKey.json 就是上一步导出的 Json 文件. d. 执行完后, 检查 git change, 现象上基本都是老的 key 会拼上模型名, 本地运行没有问题之后, 代码提交, 发布即可

  1. 对ACL中的功能权限数据进行升级

    在0.6.X版本以前功能权限资源点存储的是资源的id或者oldKey,0.6.X 相同resourceKey的资源不需要重复创建鉴权点,资源点存储的是resourceKey,所以需要对ACL中的功能权限数据进行升级。     后端提供的升级API接口是:/api/trantor/permission/upgrade(接口可以重复调用,返回发生修改的功能权限数据)

use trantor;
-- 第一步: 将oldKey临时挂在desc字段上
ALTER TABLE `meta_store__view_meta` ADD COLUMN `desc_backup` VARCHAR(512) COMMENT 'desc备份' ;
update meta_store__view_meta set `desc_backup` = `desc`;
ALTER TABLE `meta_store__action_meta` ADD COLUMN `desc_backup` VARCHAR(512) COMMENT 'desc备份' ;
update meta_store__action_meta set `desc_backup` = `desc`;
update meta_store__view_meta v set v.`desc` = CONCAT(v.FromModule, '_', v.originalKey);
update meta_store__action_meta a set a.`desc` = CONCAT(a.FromModule, '_', a.originalKey)
-- 第二步: 执行功能权限升级API: /api/trantor/permission/upgrade
-- 第三步:还原desc字段
update meta_store__view_meta set `desc` = `desc_backup`;
update meta_store__action_meta set `desc` = `desc_backup`;
alter table meta_store__view_meta drop `desc_backup`;
alter table meta_store__action_meta drop `desc_backup`;
-- 第四步:校正菜单数据
UPDATE taurus.acl_permission p
INNER JOIN trantor.meta_store__menu_meta m on p.id = m.permissionId
SET p.`meta_data` = CONCAT('{"resourceList":[{"resourceId":"',m.`key` ,'","resourceType":"Menu"}],"type":"Menu"}')
WHERE p.meta_data = '{"type":"Menu"}';
-- 初始化应用菜单的功能权限树
-- /api/trantor/meta/menu/initPermissionTree?appKey=
update meta_store__menu_meta m
set m.permissionId =
(select id from taurus.acl_permission p
where p.`key` = concat('trantor:function_', cast(m.id as char) ) limit 1 )