EJB项目如何升级SpringCloud
记录某金融机构老项目重构升级为微服务过程1
如何从EJB架构拆分微服务
这个非常有趣的过程,整个过程耗时大致接近半年时光,需要考虑到重构升级保留原来的业务线,而且还要考虑后续的维护成本,保留现有的数据库表结构,以减少数据后续的迁移工作,只从现有的ESB体系的老系统中剥离升级为微服务架构,本文大致从现有的ESB架构的体系中的EJB项目升级springcloud的完整过程,这个介绍体系后续持续更新。
EJB架构升级为SpringCloud
我们原来的EJB的金融系统的老项目已经使用很多年,对这个业务线以及设计的表结构,还有这个架构里面涉及到的方方面面的工具类,使用的模板套路都非常熟悉,如果在现有的老系统新增业务线也能支撑业务的扩展以及揽客的要求,但是随着公司提出的开源节流,对于开发从业者的成本控制,以及项目迭代的周期要求逐渐提高,原来的EJB架构的瀑布流模式的开发明显更高成本,现在分析EJB项目里面的各个组件的功能,梳理出来,接口层API,防腐层,业务层,分发层,以及页面使用vue3作为渲染数据的架构,实现前后台分离。
- 全新的界面设计 ,使用vue3的组件,界面明显清晰,得到快速响应的效果,而且基于事件驱动,调用后端接口实现局部数据的刷新渲染,提高用户体验,这里简单介绍VUE3的使用,具体还是后端的服务切分以及如何减少数据迁移成本展开叙述。
- EJB原来是使用sessionBean实现业务数据的流转,而且业务高度耦合,特别是通过EJB存根对象调用存储层的接口就明显的非常冗余,代码结构非常的混乱,而且新手上手成本非常高,能让开发先需要了解各个组件的使用套路才能更好的专注业务逻辑代码的编写;
- 增加了 抽象存储层 ,升级的老系统最重要是抽象出一个单独的公共的微服务,仓储层,这个服务主要是为了减少后续的数据迁移成本,继续保留现有的数据库表结构的一个设计,原老系统使用了大量的PROCEDURE,复杂的表关联逻辑,即使拆分了微服务,这部分的逻辑都不能马上可以拆分合理的业务逻辑,所以保留现有的procedure是非常明智的办法,保留这些核心的逻辑,都抽象到一个单独的微服务,其他的微服务就可以通过feign进行调用,但是这里要注意,这里的仓储层已经是链路的最后一个节点,不能调用其他的微服务,但是其他业务层可以互相调用而且最后调用的链路是这个仓储层,所以这里的设计需要并发的访问处理,并且需要设计缓存层对热点数据进行减少磁盘的冲击,仓储层只要设计API模块,负责提供远程微服务的调用入口,以及JDBCExcute的封装,实现调用procedure。这个微服务没有负责的代码层面的逻辑,核心的逻辑都是原来老系统的procedure进行封装好,保留继续使用即可。
- 全新的 service层的设计 从老系统剥离的MVC三层架构升级为多个微服务,而且链路要短,关联表要少,上手容易,维护容易,方便新业务线的新增改造等,围绕这些触发点,新增的微服务service层设计就非常重要,这里就通过剥离原来controller的分发后端的逻辑,原来通过EJB调用暴露的接口API,改为抽象的仓储层API接口调用,这里就简化了升级的设计难度从原MVC升级多个微服务之间的调用,简单容易理解,几个例子,原来jsp通过form表单提交后端的数据,使用的是formBean接收,这里的Bean肯定是无状态的Bean,只负责提交到后端的controller进行接收做业务处理,比如数据的类型转换,格式转换,外接口的调用返回当前业务线数据查procedure的参数等,无非就是数据的过滤转换,以及外接口的返回参数的处理,一并组装新的VO作为参数查核心的业务脚本;
- 举个简单的业务线作为本次记录的收尾,汇款功能,相信所有的金融机构都有这个功能,这个功能点,具体的表结构,核心的主表肯定有USER表,PRAM参数表,RATE汇率表,ACCOUT账户信息表,REMITTANCE汇款表等等这些核心表构成,这里的核心表账户表属于常用的逻辑,可以封装为accountUtil,提出抽象的VO 提供多个模块使用,包括一些常用的负责处理逻辑,关联逻辑,都可以体现在这个工具包下,另外页面的API接口的剥离设计,这里可以分2种常用的方案,进行API的分割,比如第一种,一个Form表单分多个tab没有tab都有单独的信息展示,而且这些都来自一个大表的其中一些核心数据,还有其他关联表的数据,这里就可以通过多个tab划分多个API进行调用,这样的好处就是前端的设计容易保留原来的业务功能,新系统上手难度低,用户保留熟悉感,能快速上手完成汇款交易,但是这里同样也有缺点就是加大了后端切分的业务量,原来的一个tab是一个大表关联其他表返回的完整的FormBean进行返回页面,现在是一个tab进行切割,导致这里的Bean需要重新设计,而且原来的service层的代码逻辑都需要改变,特别是组装VO查询procedure的逻辑,当剥离多个API接口后,查询核心逻辑分开,然后重新组新的response对象返回,其实相当于重构了原来MVC里面的controller的业务代码,对后端开发耗时非常大而且粒度非常大,不容易分离抽象通用的代码块,另外一种方式就是通过粒度更细的方式进行升级构造,比如,页面如果多个字段,而且有些字段需要通过ajx局部刷新请求后台的这类就非常适合抽象成API进行单独的设计,另外还有初始化页面的dropdown的数据,等都非常适合这类型的单独设计为新的API接口,这个设计思路也有弊端就是后端的接口压力非常大,需求额外新增缓存来进行防护,增加了维护成本,所以这两种各有利弊;
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
后续有新的体会再续作,反正微服务升级改造也比较简单,但是需要对老系统的原来业务非常清晰,组件的使用非常清楚才能更好的把我新的微服务的功能设计
相关文章:
EJB项目如何升级SpringCloud
记录某金融机构老项目重构升级为微服务过程1 如何从EJB架构拆分微服务 这个非常有趣的过程,整个过程耗时大致接近半年时光,需要考虑到重构升级保留原来的业务线,而且还要考虑后续的维护成本,保留现有的数据库表结构,…...

HTTPS 协议原理
一.HTTPS的定义 大家在刚开始学习的时候是不是也是非常好奇HTTP与HTTPS之间有什么区别和联系,两者都是应用层协议,而HTTPS是在HTTP的基础上引入了加密层,从而将HTTP的明文传输进行加密,保障数据的安全性 二.加密与解密 定义&#…...

Vxe UI 表格行编辑(默认不显示编辑框,点击后可编辑)
效果: HTML代码:(type"integer"为这个,是限制只能输入正整数或负整数,英文和汉字自动转成0) <vxe-tableshow-overflowkeep-sourcev-loading"loading":data"ruleList"ref"Table":row-config"{isHover: true}"height"…...

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展
10月27-30日,2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商,移远通信再次亮相,并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…...
爬虫利器playwright
是什么 它是微软在 2020 年初开源的新一代自动化测试工具,其功能和 selenium 类似,都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器,打开百度,输入漂亮小姐姐并查找&#x…...

着色器的认识
知识了解: 着色器: 顶点着色器: 用来描述顶点的特性,如位置、颜色等,其中,顶点:是指二维或三维空间中的一个点比如交点或者端点。 片元着色器:用来进行逐片元处理操作,比如光照、颜色叠加等&…...
科技的成就(六十四)
591、《传奇》开始公开测试 "2001 年 9 月,《传奇》开始公开测试。《传奇》(全称《热血传奇》)是由韩国 WeMade 娱乐开发制作的大型多人在线角色扮演游戏,由 Delphi 编写。盛大网络于2001 年获得该游戏在中国的代理权。《传奇…...

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...
全文链接:https://tecdat.cn/?p38026 分析师:Fanghui Shao 在当今金融领域,风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户,还是信贷风控模型的构建,以及基于决策树的银行信贷风险预警,…...
〈壮志凌云:独行侠〉中的超高音速战机
电影《壮志凌云:独行侠》中使用的黑星(Darkstar)高超音速概念战机模型,虽然看起来像是科幻电影里的产物,但这架飞机实际上是由洛克希德马丁公司的臭鼬工厂(Skunk Works)设计,这是一家…...
k8s集群 ceph rbd 存储动态扩容
k8s 集群 rbd 扩容有两种方法,如下所示 通过StorageClass自动扩容 # kubectl get sc csi-rbd-sc -oyaml|grep allowVolumeExpansion allowVolumeExpansion: true如果搜索有如上字段,说明是可以自动扩容的,修改对应要扩容的 PVC容量…...

C语言笔记(指针题目)例题+图解
本文分为两部分 ,第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析,第二部分是一些笔试题目。若有错误,请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…...

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)
从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书) 文章目录 从零开始的 vue项目部署到服务器详细步骤(vue项目build打包nginx部署配置ssl证书)一、前言二、vue项目部署前配置1、vite.config.js 增加…...

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来
前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…...
项目:抽奖系统
文章目录 1. 项目:抽奖系统 1. 项目:抽奖系统 from faker import Fakerfk Faker(localezh_CN)name_list [] for i in range(100):name_list.append(fk.name()) print(name_list)import randomclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__…...

synchronized进阶原理
synchronized进阶原理 1.轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化(如果出现竞争,操作系统会将轻量级锁升级为重量级锁)。轻量级锁对使用者是透明的(由操作系统控制),即语法仍是s…...

C++,STL 052(24.10.29)
内容 1.对map容器的大小进行操作。 2.map容器的交换操作。 运行代码 #include <iostream> #include <map>using namespace std;void printMap(map<int, int> &m) {for (map<int, int>::iterator it m.begin(); it ! m.end(); it){cout <<…...

git下载和配置
git是什么? Git是一种分布式版本控制系统,用于跟踪文件的变化,尤其是源代码。它允许多个开发者在同一项目上进行协作,同时保持代码的历史记录。Git的主要特点包括: 分布式:每个开发者都有项目的完整副本&a…...

Linux基础—基础命令及相关知识5(ubuntu网络配置)
网络的配置方法 centos网络配置 centos的网卡位置 /etc/sysconfig/network-scripts/ifcfg-ens33(centos网卡文件) bootproto表示获得IP地址的方式是静态的还是动态 onboot表示启动系统时是否激活该网络接口 设置IP地址,子网掩码,网关,dns…...
使用 firewall-cmd 管理 Linux 防火墙
firewalld-cmd命令翻译<一> Linux 系统中,firewalld 是一个流行的动态防火墙管理工具, firewall-cmd 是它的命令行接口。通过 firewall-cmd,可以轻松地管理防火墙规则、配置区域(zones)、处理端口等。 这篇文章…...
鸿蒙OS试题
哪些是持续部署最佳实践? A. 灰度发布:先在小部分用户或区域进行部署,观察没问题后再全面推广 B.手工部署:持续部署可以采用手工部署的方式发布软件: 1、有一份非常详尽的文档,该文档描述了执行步骤及每个步骤中易出错的地方; 2、以手工测试来确认该…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...