0.13 改动
- Library
- Framework: 0.13.0-SNAPSHOT
- MavenPlugin: 0.13.0-SNAPSHOT
- Image
- MetaStoreManagement Image: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-metastore:201029.201509
- MetaStore Image: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-metastore:201103.095110
- Trantor Console: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-console:1.13.0-beta.49
- Trantor Workspace: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-workspace:1.13.0-beta.49
- DataStore 建议配套版本:registry.cn-hangzhou.aliyuncs.com/terminus/datastore:5.1.0.36
- Tool
- Trantor CLI: 0.13.8
变更内容
新增变更
-
【机制】增加了制品和定制功能 Trantor 对于端点的业务产品搭建结构做了一些定义, 包括标品的研发流程以及定制项目的研发流程, 增加了很多新的概念和流程.
-
【机制】增加了菜单项资源 菜单项从完全运行态配置, 变成了模块可以声明可用菜单项, 再由菜单项配制出菜单的方式进行, 所以在原有的资源声明中, 多了 菜单项 这种资源.
-
【机制】增加分库配置 增加了分库的配置, 允许项目针对模块做不同的分库配置, 从而达到业务上基于模块的垂直分库.
-
【机制】增加分表配置 之前 Trantor 的分表配置是完全在模型上声明的, 包括分表键和分表数量, 这其实是不对的, 因为分表与否以及分表数量, 在不同环境可能都是不同的情况, 应该跟随部署结构走. 所以这次我们做了一些调整, 模型上只配置分表键, 但是是否开启分表, 分表数量都在环境上, 跟随发布计划完成配置.
-
【机制】增加 Link 和 Lookup 关联关系 考虑到未来 Trantor 可能面临数据会分库等场景, 会导致联查联写变得很困难, 需要考虑分布式事务, 分库键等问题. 所以考虑提供另外一种数据关联方式, 就是不会影响目标模型, 且不允许级联写, 但是查询方面变化不大.
-
【机制】增加了字典项分组的功能 某些场景下, 我们会对字典项的可选范围作出一些限制, Trantor 之前没有很好的 API 来使用, 需要声明每一个可用的字典项, 这就比较繁琐. 因此我们提供了一个字典项分组的功能, 可用给字典项增加分组, 然后在 DSL 中根据分组进行过滤.
-
【机制】增加了业务维度的机制 相关背景是包括交付控制台在内, 会有很多业务有一些业务数据划分, 比如企业下的项目, 公司内的门店, 本身是一个被授予权限的数据, 但是用户的权限和数据可见性都会受到该数据的限制. 所以我们提供了业务维度的概念, 可以在应用级别直接声明数据隔离.
-
【工作台】增加 HomePage 功能 Trantor 增加了新的导航页面, 效果如下:

-
【前端】增加无 Count 列表 可用于某些大数据量情况下, count 十分耗时的场景, 这一类场景一般也不会查看最后几页, 数据也都比较多, 所以可以不关心总共有多少条, 具体有多少页, 只提供基于页数翻页即可.
- 【工具】CLI 支持命令直接清除本地 mysql 或配置数据,运行 trantor clean db 即可。也支持备份旧数据 trantor clean db -b。 更多 clean 命令可以运行 trantor clean -h。
优化
- 【机制】修改了 Trantor 配置的加载方式: 模块不在需要显式的声明 Incloud Trantor 的 application.yml
- 【机制】默认支持了 Dice addon 的环境变量 Key, 不再需要手动配置, 其中 Mysql, Oss, RocketMQ 已支持
不兼容变更
-
【机制】增加制品概念, 标品需转制品 因为制品概念的引入, 提供了版本拉平, 统一管理标品依赖的能力, 对于现在的标品, 我们需要创建 SCP 制品项目, 并且将标品元信息都上传至 SCP.
-
【机制】修改了 trantor.yml 声明格式 因为引入了制品和定制的概念, 所以我们修改了 trantor.yml 的声明文件, 而且制品项目和定制项目会有所区别. 针对 0.12 来说, 最显著的改动就是增加了制品的声明, 并且修改了模块依赖的声明方式.
-
【机制】应用/菜单/权限, 从运行态迁移至研发态 应用从原来的运行态概念, 变成了研发态内的一个新的概念, 制品也可以产出应用, 应用下包含菜单, 权限, 角色等资源, 可以被发布到运行态, 也可以在定制项目中被二次开发.
- 【机制】地址库模型District从底座Meta_store模块移动到Base模块 如果业务模型中使用了地址库模型District,需要更改package路径。如果之前meta_store_District表数据有变更,可以将base_District默认初始化数据清空,将数据导入到base_District,比如执行
insert into base_District select * from meta_store_DistrictBugFix
- 【DAO】修复 *ConnectRelation 系列方法中的 connect 行为, 之前是在关联中增加新的对象, 修复为将对象的关联设置为新的对象. 举例来说, 原本对象 A 内字段 orders, 当前记录是 [1,2]. 调用 updateConnectRelation 设置 orders: [3,4] 时, 之前为结果会变成 [1,2,3,4], 但期望变成 [3,4]. 所以需要项目组整体过一遍相关的 api, 看是否对 api 有错误的期望, 导致更新后效果不一致的情况.
- 【DAO】修复 *IgnoreRelation 系列方法中, 某些情况下 ignore 会失效的问题.
迁移升级
trantor.yml 声明修改
- 制品项目模块声明格式如下:
product: # 当前制品的信息 key: scp # 制品的唯一标识 version: 2.0.0.RELEASE # 当前制品版本 dependencies: # 依赖制品的那些模块, 这里不用填写版本 - key: order-centermodule: # 模块信息, 基本和之前的一致 key: meta_store name: Meta Store packageName: io.terminus.trantor.metaStore version: 1.0.0-SNAPSHOT description: Meta Store Module- 定制项目模块声明格式如下:product: # 当前项目的信息 key: trantor version: 0.0.0-SNAPSHOT # 目前定制项目的版本是固定的, 都是 0.0.0-SNAPSHOT dependencies: # 当前项目范围内的依赖 - key: basestandardProduct: # 定制项目所依赖的制品信息 key: SCP # 依赖的制品 Key, 公司内默认都是 SCP version: 2.0.0.RELEASE # 依赖的制品版本 dependencies: # 依赖的制品模块, 不用填写版本 - key: user-centermodule: # 模块信息, 基本和之前的一致 key: meta_store name: Meta Store packageName: io.terminus.trantor.metaStore version: 1.0.0-SNAPSHOT description: Meta Store Module菜单项资源声明
菜单项需要声明在模块内, 可以在 trantor 资源目录下创建以 -menu-item.json 结尾的文件, 文件内声明该模块提供的菜单项内容, 该文件的内容会被上报到研发态, 供应用配置菜单时使用.
文件格式如下:
[ { "originalKey": "toList", // 菜单Key "name": "用户列表", // 菜单标题 "routingType": "Action", // 菜单的类型 // 如果是类型是 Action, 则配置 ViewAction // 如果是类型是 IFrame 或者 URL, 则配置 URL "routeKey": "usercenter_UserCenter_userList" }, { "originalKey": "toForm", "name": "用户表单", "routingType": "Action", "routeKey": "usercenter_UserCenter_userForm" }]应用配置
因为应用声明从运行态移到研发态, 会导致之前声明在具体环境内的应用失效, 所以我们需要在制品/定制项目内, 重新配置应用声明. 这部分完全是在线上的交付控制台进行操作, 步骤如下:
- 切换至具体项目
- (可选) 如果是制品, 则还需要切换制品版本
- 左侧菜单选择应用
- 右上角点击创建, 填入基本信息后保存
- (详见菜单配置)在应用管理列表上, 找到刚创建的应用, 右侧选择菜单配置
- (详见权限配置)在应用管理列表上, 找到刚创建的应用, 右侧选择功能权限
菜单配置
我们可以提供脚本让运行态的菜单依然可以使用, 但是不完成配置的情况下, 发布元信息会导致这部分菜单丢失. 所以我们需要在研发态的应用下, 重新创建菜单, 步骤如下:
- 切换至具体项目
- (可选) 如果是制品, 则还需要切换制品版本
- 左侧菜单选择应用
- 右上角点击创建, 填入基本信息后保存
- (详见菜单配置)在应用管理列表上, 找到刚创建的应用, 右侧选择菜单配置
- 点击新增根菜单或者在某菜单内新增子级菜单
- 填写相关信息保存
权限配置
因为权限是基于菜单项展开的, 以及应用被移到研发态, 导致之前配置的运行态权限会失效, 所以我们需要在应用下重新配置一次功能权限,
数据权限类似, 此处不再复述.
制品数据重新上报
- 创建 SCP 制品项目
- 创建相应 SCP 制品版本
- 修改模块内 trantor.yml, 增加制品和版本声明
- 上报元信息
本地开发
在 013 之前,本地编码上报之前不需要关心交付控制台。013 之后加入了产品概念,因此需要在上报之前新建一个产品。 目前概念上产品几乎等价于项目,在本地 Trantor 底座启动完毕以后访问交付控制台,会看到一个默认租户,在该租户下新建一个制品项目即可。注意,该制品项目的 key 需要与 trantor.yml 中申明的 product key 相同, version 同理。 下面是操作流程,以图片表示:
ACL升级到2.0.0版本
ACL 低于2.0.0版本分为Server和Client两个应用。2.0.0以后变更为基于Trantor模块运行,新增了ACL Trantor模块应用服务,旧的Server和Client合并成一个服务。ACL模块元信息发布完成后,需要将Taurus数据库表数据迁移到对应的模型表中,迁移脚本如下:
- ACL 2.0数据迁移(数据库表字段驼峰命名)
-- 迁移项目insert into `taurus_domain__project`(`id`, `key`,`name`, `tenantId`,`desc`, `createdAt`,`updatedAt`,`isDeleted`,`createUser`) (select `id`, `key`,`name`,`tenant_id`, `desc`, `created_at`, `modified_at`,`deleted`,`create_user` from taurus.`acl_project` where `key`='trantor' and `deleted`=0);
-- 迁移应用INSERT INTO `taurus_domain__app` (`metaData`, `createdAt`, `isDeleted`, `tenantId`, `name`, `id`, `projectId`, `key`, `desc`, `updatedAt`, `CreatedBy`, `UpdatedBy`)(select `meta_data`,`created_at`,`deleted`,`tenant_id`,`name`,`id`, `project_id`, `key`, `desc`, `modified_at`, 1,1 from taurus.`acl_app`where `deleted`=0 and `project_id` = (select `id` from taurus.`acl_project` where `key`='trantor' and `deleted`=0) );
-- 迁移角色表INSERT INTO `taurus_domain__role` (`id`, `name`, `key`, `hide`,`limited`, `mastered`, `metaData`, `createdAt`, `deleted`, `isDeleted`, `appId`, `affiliationType`, `tenantId`, `typeId`,`affiliationId`, `projectId`, `relatedRoleId`, `desc`, `updatedAt`, `UpdatedBy`, `CreatedBy`)(select `id`, `name`,`key`, `hide`, `limited`, `mastered`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `affiliation_type`, `tenant_id`, `type_id`, `affiliation_id`, `project_id`, `related_role_Id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_role` where `deleted` = 0)
-- 迁移用户INSERT INTO `taurus_domain__user_info` (`createdAt`, `isDeleted`, `mobile`, `tenantId`, `id`, `userName`, `userId`, `updatedAt`, `UpdatedBy`, `CreatedBy`)select `created_At`, 0, `mobile`, `tenant_Id`, `id`, `user_Name`, `user_Id`, `updated_At`, 1, 1 from taurus.`acl_user_info`
-- 迁移权限INSERT INTO `taurus_domain__permission` ( `id`,`name`, `key`, `directed`, `type`, `parentId`, `metaData`, `createdAt`, `deleted`, `isDeleted`, `appId`, `tenantId`, `projectId`,`desc`, `updatedAt`, `CreatedBy`, `UpdatedBy`)(select `id`,`name`,`key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `tenant_id`, `project_id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_permission` where `deleted` = 0);
-- 迁移用户角色INSERT INTO `taurus_domain__role_relation` (`permissionDelegate`, `bizType`, `roleId`, `createdAt`, `hide`, `isDeleted`, `tenantId`, `bizId`, `id`, `ruleId`, `projectId`, `updatedAt`, `CreatedBy`, `UpdatedBy`) (select `permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, 0, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_relation`)
-- 迁移角色权限授权INSERT INTO `taurus_domain__role_permission_authorization` (`permissionId`, `permissionType`, `roleId`, `permissionRule`, `createdAt`, `isDeleted`, `disable`, `permissionKey`, `inherit`, `tenantId`, `id`, `authType`, `projectId`, `updatedAt`, `CreatedBy`, `UpdatedBy`) (select `permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, 0, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_permission_authorization`)- ACL 2.0数据迁移(数据库字段命名下划线)
-- 迁移项目insert into `taurus_domain__project`(`id`, `key`,`name`, `tenant_id`,`desc`, `created_at`,`updated_at`,`is_deleted`,`create_user`) (select `id`, `key`,`name`,`tenant_id`, `desc`, `created_at`, `modified_at`,`deleted`,`create_user` from taurus.`acl_project` where `key`='trantor' and `deleted`=0);
-- 迁移应用INSERT INTO `taurus_domain__app` (`meta_data`, `created_at`, `is_deleted`, `tenant_id`, `name`, `id`, `project_id`, `key`, `desc`, `updated_at`, `created_by`, `updated_by`)(select `meta_data`,`created_at`,`deleted`,`tenant_id`,`name`,`id`, `project_id`, `key`, `desc`, `modified_at`, 1,1 from taurus.`acl_app`where `project_id` = (select `id` from taurus.`acl_project` where `key`='trantor' and `deleted`=0) ) and `deleted`=0;
-- 迁移角色表INSERT INTO `taurus_domain__role` (`id`, `name`, `key`, `hide`,`limited`, `mastered`, `meta_data`, `created_at`, `deleted`, `is_deleted`, `app_id`, `affiliation_type`, `tenant_id`, `type_id`,`affiliation_id`, `project_id`, `related_role_id`, `desc`, `updated_at`, `updated_by`, `created_by`)(select `id`, `name`,`key`, `hide`, `limited`, `mastered`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `affiliation_type`, `tenant_id`, `type_id`, `affiliation_id`, `project_id`, `related_role_Id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_role` where `deleted` = 0)
-- 迁移用户INSERT INTO `taurus_domain__user_info` (`created_at`, `is_deleted`, `mobile`, `tenant_id`, `id`, `user_name`, `user_id`, `updated_at`, `updated_by`, `created_by`)select `created_At`, 0, `mobile`, `tenant_Id`, `id`, `user_Name`, `user_Id`, `updated_At`, 1, 1 from taurus.`acl_user_info`
-- 迁移权限INSERT INTO `taurus_domain__permission` ( `id`,`name`, `key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, `is_deleted`, `app_id`, `tenant_id`, `project_id`,`desc`, `updated_at`, `created_by`, `updated_by`)(select `id`,`name`,`key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `tenant_id`, `project_id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_permission` where `deleted` = 0);
-- 迁移用户角色INSERT INTO `taurus_domain__role_relation` (`permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, `is_Deleted`, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `updated_At`, `Created_By`, `Updated_By`) (select `permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, 0, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_relation`)
-- 迁移角色权限授权INSERT INTO `taurus_domain__role_permission_authorization` (`permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, `is_Deleted`, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `updated_At`, `Created_By`, `Updated_By`) (select `permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, 0, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_permission_authorization`)
