springboot集成流水

应公司要求,使用springboot,从已有服务A中拆分出一个小服务B。

B服务现有功能很简单,所以没有什么干货。记录一下集成遇到的一些问题。水平有限,欢迎指正。

接收这个任务之后,我想了很多。

首先,是否有必要拆分?

结合一些常见的坑,我觉得有必要。因为A服务并不依赖B,B是一个业务相对独立的服务,逻辑上是可分的。如果不分,那么B服务的升级,就需要更新整个A服务,A服务是否可用,也一定程度上受B服务的影响。

直觉有了,又借鉴了一些前辈的经验(这里笔者有话叨:作为一个撸码多年的渣农,极度推崇曾经看到的一句话,大意是,自己思考,谷歌搜索,与人讨论,这三步基本可以解决一切问题。划重点,谷歌搜索。),该拆。

该拆到拆,还多个该字。是否能拆?拆的工作量有多大?拆了之后,怎么做回归测试,来验证原有功能不受影响?拆前有理论支持,拆后怎么验证其必要性?

每次总容易想很多,可是不知道从什么时候起,还很认同一句话:合格的工程师,更多的时间用于思考,少量的时间用于实现。想的越多,实现起来就越简单,安全,高效,稳定,等等。所以,该想的总还是要想。想到的,总还是要解决。

是否能拆呢?我逐一去检查了B服务所有功能涉及的相关服务及其大致的流程,感谢A服务中对B服务进行编写的前人,他们高瞻远瞩的良好设计,使得B服务虽然代码放在了A服务中,但主要逻辑基本是独立于A服务编写的。这样一来,工作量也基本有个数,那就着手开拆了。至于回归测试,肯定是要交到专业的测试人员了。拆分的必要性,我相信拆完之后,大家用几次,心里自然就明白了。

开拆之前,我列出了所能想到的拆分涉及的过程,步骤。

  • 确定B服务已有的全部功能,及流程
  • 列出B服务涉及的全部数据源
  • 确定A服务与B服务的交集,及交集的处理方式
  • 项目框架组合的选择
  • 公司内部对项目配置,构建,发布,测试,监控等相关要求的处理
  • 框架的搭建
  • 逻辑的填充
  • 测试

交集的处理方式:简单粗暴的复制,因为交集小的可怜,而且在拆分之后,没有多少公用的特征。

项目框架组合的选择:考虑到B服务目前功能相对简单,而且基本没有并发,内存基本够用,那么优先级更高的,应该是快速完成稳定的拆分。又考虑到组内没有前端支持,所以,怎么简单怎么来,要什么自行车?springboot+thymeleaf+mybatis,构建基于Maven就足够了。

框架的搭建,有几句要多念叨念叨。

因为近两年,习惯了前后端分离,忽然不分离了,总时不时有些恍惚。而且自出道以来,我也没正儿八经搞过商用的前后端不分离的项目。

那么,要搞多模块吗?怎么搞?

多模块这边考虑的有点着急,也有些乱,而且最后也没采用,所以等有空再来梳理这一段,当时的思考历程,相对专业的理论分析,以及如果要做,要怎么做的方案。

此处暂时省略n个字。

搭框架,简单的说,是为了将所有选定的技术组合起来,跑通从请求到响应的流程。比如处理好对资源的权限控制和预处理,处理好日志,接通数据源。

往细了说,我认为最少还应该重视两点。第一,制定标准。第二,方便后续的同学协同开发。

需要制定的标准有很多个。比如,统一的返回。在接口或页面资源存在的情况下,不管是否正常返回,也不管返回内容是什么,应该要有个统一的格式。这个统一的格式,对后续协同开发的同学来说,最好是透明的。要想做到统一的返回,必须要配合统一的异常处理。因为要保证抛出异常时,返回的格式不变,不管是捕获到的,还是没有捕获的。这一点,对后续同学来说,也最好是透明的。

方便后续的同学协同开发,这里最好是能实现一些工具(如Json,Date,并发工具),并对这些工具,和引入的其他三方工具库(如guava)的职责,编写一个简单的文档。这样新加入这个项目的同学,就可以避免重复造轮子。

已经这么迟了啊~手动拜托,身体扛住。

让我再记一些久了就容易模糊的小东西。

学会利用官方文档,很多东西,官网上写的很详细。比如前端模板修改了,怎么不去重启整个服务,就能动态的替换?这也是为了让后续同学在重写模板的时候,不至于骂街。方法很多地方都能搜到,第一步,引入devtools,第二步,配置前端模板的cache为false。可是我尝试之后,并不work。只能求助文档。文档太详细了。详细的介绍了devtools,应该在maven引入的时候置为optional,从而避免生产环境下,以jar文件的形式启动也会包含devtools(打成jar包的时候就不包含devtools了);详细的介绍了devtools,包含了很多的特性,用于方便开发过程;详细的介绍了上述问题的两个步骤,以及在不同IDE下触发work条件的方式。

请求依次经过我们配置的filters,然后spring查找对应的servletHandler,如果有handler,进入interceptor(如果没有,返回404。注意,即使是Get/Post不支持,也无法匹配到handler),再进入aop,交付method执行,此时才进行参数处理,发生缺失参数,参数类型不匹配,又或者是controller中抛出其他异常,都会进入controllerAdvice(API使用RestControllerAdvice)中的exceptionHandler进行统一处理。

好了,有空在接着写吧。

转载于:https://juejin.im/post/5c7174a5518825047b1cb457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值