1 场景与架构
1.1业务架构
这里涉及项目隐私,架构图不方便公开。
大致情况就是:
应用层的园区畅行、生态宜居、安全守护是我方要交付的系统。
平台层的物联网感知中台是我方平台。
1.2数据架构
从数据架构看,园区畅行、生态宜居、安全守护为我方业务平台,除3个平台内部可能有数据交互的情况,还可能涉及与局方的IOC运营平台、数据中台、视频中台进行交互。
本次预研引入TDengine数据源,单独搭建多数据源支持已经验证可行。现阶段计划二步走方案:
- 先尝试业务平台集成TDengine数据源支持
- 如果业务平台可以升级集成,并且步影响原业务,变动代价小,就走直接集成方案
- 如果2不成功或变动代价大,就走单独搭建,对我暴露相关服务。
对于以上会上确定的二步走方案,结合业务架构、数据架构,我个人比较倾向单独搭建,单独搭建的服务在业务平台与局方平台之间做数据交换,起到数据交换中心的作用,并且还承担我方数仓(数据仓库)角色,与局方平台做单一入口对接,数据交换的功能。架构变更如下图:
之前架构没有参与讨论与设计,详细细节也了解的不够深入,可能理解有偏差。所以对于以上这个建议架构做保留意见,当然如果这个集成TDengin时序数据库单独成立服务模块,后期是可以扩展这个模块的能力。
2业务平台扩展TDengine支持
2.1业务平台基本情况
这里只罗列集成相关的情况:
1、 mybatisPlus相关依赖jar包版本3.1.2(版本太老,不支持TDengine)
2、 mybatis-spring-boot-starter与mybatis-plus-boot-starter都需要升级
3、 业务Controller有继承mybatisplus-extension的ApiController(3.4.2已移除RestApi相关模块)
4、 MybatisPlus在3.4.2以上版本分页插件才支持TDengine
5、 SpringBoot有点低
6、 原mapper可能需要指定数据源
7、 多数据源配置需要调整架构
2.2业务平台集成Tdengine
2.2.1升级MyBatisPlus版本
相关3.1.2版本升级到单独验证可行的版本(3.5.3.1),出现的情况如下:
1、 所有entity的注解@TableId找不到包
原包路径com.baomidou.mybatisplus.annotations.TableId;
先包路径com.baomidou.mybatisplus.annotation.TableId;
高版本已经变更包路径,这个注解应该没有风险,只是所有的Entity都得改。
2、 所有使用LambdaUpdateChainWrapper找不到包
原包路径
com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
新包路径
com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
高版本已经变更包路径,这个风险没有测试,变更包路径没有保存,不确定是否语义又变化,目前看使用的语义没有标识过时、废除等。
3、 所有entity的注解@ TableField找不到包
原路径com.baomidou.mybatisplus.annotations.TableField;
新路径com.baomidou.mybatisplus.annotation.TableField;
高版本已经变更包路径,这个注解应该没有风险,只是所有的Entity都得改。
4、 所有entity的重写pkVal()方法报错
原mybatisPlus的pkVal()是protected修饰
现在需要改为public修饰
这个应该也没有风险。
5、 MybatisPlus的基类Model包名变了
原路径com.baomidou.mybatisplus.activerecord.Model
新路径
com.baomidou.mybatisplus.extension.activerecord.Model
6、 MybatisPlus的count()返回值变了
原先mybatisPlus的count()方法返回的是Integer
现在的count()返回的是Long(3.4.3版本之后)
7、 MybatisPlus的selectCount()返回值变了
原先返回的是Integer
现在返回的是long(3.4.3版本之后)
2.2.2衍生配置类需要调整
升级MybatisPlus后,相关配置类需要调整。
1、 MybatisPlus分页插件PaginationInterceptor配置类变更
原路径:com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
3.4.2后已移除,变更为新的分页插件,配置方法也有差异。
2、 逻辑删除LogicSqlInjector拦截插件变更
高版本的已经不需要配置插件。
3、 MybatisPlus性能分析插件PerformanceInterceptor变更
原路径
com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor
在3.2.0之后被移除了,官方推荐使用第三方分析插件
4、 快速生成代码方式发生变化
这里不做调通处理,因为不是主线目的。
5、 MybatisPlus的api目录不存在
这个RestApi模块在3.4.2以后就移除了。因为业务平台使用了,所有业务Controller都继承了ApiController。
这里处理方式:从3.4.2版本里反编译,并在项目下新建同样的目录,拷贝这个模块的相关代码。
2.2.3升级调整后异常处理
1、java.lang.NoSuchFieldError: ASSIGN_ID异常
原因是mybatis-spring-boot-starter与mybatis-plus-boot-starter版本不匹配。
2、mybatis-spring-boot-starter升级以后,对JDK要求17
不升级mybatis-spring-boot-starter,注解@MapperScan报错要求JDK17
3、SpringBoot的版本也需要升级
因为mybatis-spring-boot-starter升级,springboot的版本也需要升级
现在是2.2.6.RELEASE,升级要连跨好几个大版本,升级也会导致很多配置项失效,风险极高。
2.2.4代码改动量
目前排除JDK版本要求,还没有计算TDengine接入的改动量如下:
可见直接接入变更点还是非常多,有service、entity、配置类等等。后面还是涉及需要回归测试,代价还是很大,个人还是不倾向这种直接扩展方案。
至此,考虑避免影响业务底座、业务全回归测试成本等等因素,直接对接方案还是放弃。
最终这是一次失败的升级,实在是交付底座太老,牵扯的东西太多,代价太大,最终放弃,还是采用了单独提供服务模块的方式。
好了,就写到这里,希望可以帮到大家。