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 相关配置都可以移除,作为代替,只需要配置一个 ModuleDefinition 的 class 全名路径即可。
- dice.yml 配置变化
# 增加 Zookeeper Addon, 具体参考其他已使用 addonaddons: 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 这个版本推动更换。具体规则描述
下面是几个可能需要变更的地方:
- action 文件。
resources/trantor/resources/{moduleKey} 路径下的 -actions.json 后缀文件
以这个 action 为例,原 key 是 模块key_{key}
变更为 模型key_{key}

- view 文件。
同理,视图文件直接写 key 的地方也需要注意。
如果在 controller 中存在直接调用某个固定 key 的地方,也需要相应修改。
主要改动集中在资源文件中直接引用到资源 key 的地方,可以使用编辑器提供的全局替换做变更。
- 另外 Trantor CLI 也提供了相关的迁移工具支持.
- 安装 CLI, 可参考 CLI安装
- 通过 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 会拼上模型名, 本地运行没有问题之后, 代码提交, 发布即可
- 对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 pINNER JOIN trantor.meta_store__menu_meta m on p.id = m.permissionIdSET 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 mset m.permissionId =(select id from taurus.acl_permission p where p.`key` = concat('trantor:function_', cast(m.id as char) ) limit 1 )