iplatform平台简介

news2024/11/19 6:43:12

前置条件:原则规范


一)统一技术栈


1)关于JDK

统一使用Open JDK,版本最低1.8,几年后可能会升级到17;

避免使用Sun JDK,这是商业软件,而且包含部分私有(com.sun)类库,不利于虚拟机迁移。

新项目会统一要求环境使用Open JDK,而且当前主流操作系统默认预装(具体版本不太一样,有些需要升级)

二)数据库操作


开发人员应熟练掌握标准SQL用法,最低要求:SQL92标准,参考如下:

http://doc.xuehai.net/bd2fad0978e90e09492579599aa5719f543ac5fec.html

编写SQL代码时,不能使用数据库特定函数,如:MySQL的 to_date(),Oracle的 to_char()等;

进一步强调,如果没有特别明确的需求必须使用,则原则上不能使用函数与存储过程;

因此,研发人员应当:

1)源码中仅使用标准SQL语句,都是一些基础的,高级特性的不要使用;

2)不使用函数、存储过程

3)DAO数据层,不能引用任何与SDK有关联的任意对象,如:Oracle中 Clob**等。

这样可以实现,数据库的无缝迁移,特别是在当前国产化环境中,非常重要!

三)构建依赖(Maven/Gradle)


当前工程中对模块依赖有较大问题,粒度较粗,而且是按照横向切分,如:所有Service在一个模块,这样会导致:要么全拿来,要么就别用,负担较重,而且缺乏复用性。

应当按照微服务方式,纵向切分,一个完整的功能是一个模块,如:支付模块、基础模块、调度模块、OCR等;

1)基础类库与平台模块分离,业务模块与平台模块分离;

2)与业务无关,能提供通用底层的方法应归属基础类库模块,如:文件操作、数据库基本操作、一些接口规范定义的抽象类、接口、常量、枚举等,这些被底层封装,可以被任意业务引用。

3)平台基础管理,通用化模块并配合管理界面的内容应被划入平台,平台引用基础类库。

4)业务系统在平台基础上构建自己的项目工程,至此类库、平台都充分复用。

5)创建Maven私服,新项目需要依赖私服获取需要的模块。

四)代码质量


1)项目根POM文件

新项目根POM需要集成平台统一环境:

<groupId>com.iplatform</groupId>

<artifactId>iplatform</artifactId>

2)依赖版本号

在你的POM文件不允许使用版本号,父POM中已经引用的常用第三方库,直接引用无需加版本号;

如果确实没有提供,则说明这是一个新东西,由平台统一添加支持,业务引用即可;

还有一种情况,该第三方类库,是很冷门的,其他项目几乎不用,那么项目可以自行直接引入版本,但这种情况很少,需要由平台负责人审核。

任何私自添加依赖并引入不稳定版本,将被记录为质量事故(违规操作)

3)检查规范性

检查POM文件,查看是否存在第三方依赖、是否带有特定版本号即可快速发现问题

五)关于需求变动


Iplatform平台应用文档


iplatform是一套自研的JAVA基础应用开发套件,该平台提供了通用项目研发支持,能任意插拔其他支持模块,复用性强,积累了多年经验,是前身walker项目升级而来,结合当前流行的前后端分离模式,使开发更为高效。

前端引入了若依,后台完全独立开发,同时参考了若依的数据库中权限表的设计,结合自身特点使更加符合需求,目前支持的基础功能如下:

1)spring security权限的深度二次定制,抛弃注解方式,降低维护量

2)数据库(持久层)抛弃第三方(Hibernate、Mybatis等),直接基于Spring JDBC拓展而来,对常用方法封装,提供基础支持类库,并提供PO自动生成。

3)完善的角色权限设置,支持按钮级

4)支持多租户应用,即:多个客户同时使用一个平台,为云平台运维准备

5)跨数据库操作,研发人员只需要调整配置即可实现不同数据库的无缝迁移(开发中...)。

6)强大的缓存系统,业务使用简单,支持单机内存式缓存一级集中式Redis缓存,无缝切换。

7)独立自研的调度任务,未使用第三方Quartz,配置灵活,稳定,经历过多个项目实战(目前在改造中,计划1月底完成)。

8)对微服务的快速支持,提供Gateway网关模块,可灵活支持集群服务的接入(2.0版本较简单,计划下个版本实现配置化接入)。

9)服务注册抛弃了Euraka(新版本已经闭源),使用阿里的Nacos(需要在环境中自主安装)支持界面管理。

10)操作日志注解式配置

11)提供了基础的管理功能,如:机构、用户、权限、数据字典、菜单、日志、缓存管理、调度任务等。

一)模块说明


1)iplatform-model-pojo

生成的PO对象,数据库操作使用;base模块依赖

2)iplatform-core

平台核心模块,提供了核心的配置和对象,与管理界面无关,可以被扩展的其他平台模块依赖,如:iplatform-scheduler。

目前核心模块内容较少,随着平台完善会逐步积累更多功能。

3)iplatform-base

平台基础模块,提供了整个管理支撑结构,权限定义、用户体系、缓存系统、其他扩展定义等。

该模块提供前端界面使用的API。

通过SPI方式,支持多种安全框架,如:spring security,shiro等,shiro暂未实现。

4)iplatform-base-security

平台安全模块,提供了安全拦截、验证、权限控制等实现,系统支持多种安全框架集成,默认提供了spring security。

该模块依赖base模块,作为base的一个插件模块使用(可以被其他实现替换)

5)iplatform-scheduler

调度任务模块,即:定时任务

6)iplatform-gateway

网关模块,提供服务注册、网关路由、集群负载、参数配置(根据情况决定是否使用spring的配置模块)等服务。

该模块只能独立打包部署。

7)iplatform-ml-openocr

一个开源实现的OCR功能实现模块,引入后可支持表格、保险单、身份证的识别等,持续完善中。

8)deploy-jar-template

标准打包发布模板,在开发中,没有业务应用,需要独立打包运行测试。

二)系统缓存


系统提供了数据缓存支撑,对于持久化数据可实现:初始化缓存、添加缓存、更新缓存、删除缓存操作。

按照规范集成后,研发新创建的缓存数据,会在“缓存管理”模块中看到。

集成步骤如下:

1)定义一个接口

该步骤并非必须,这只是针对存在多种实现方式的情况,如果项目确定必须用redis则可以省略。

/**

* 组织机构缓存提供者使用规范。<p></p>

* 因为存在多种实现,如: Redis 或者 内存,因此需要抽象该接口。

* @author 时克英

* @date 2022-12-03

*/

publicinterfaceDeptCacheProvider {

/**

* 设置是否允许缓存机构的子机构关系,<br>

* 在机构数量非常庞大的时候,即便 Redis 也不太适合存储该关系,因为通常界面会展示较多数据,<br>

* 此时可能退化成数据库查询,或者通过其他 NoSQL 数据库实现。

* @param allow

* @date 2022-12-03

*/

voidsetAllowCacheChildren(booleanallow);

S_deptgetDept(longdeptId);

voidupdateDept(S_depts_dept);

voidremoveDept(longdeptId);

voidputDept(S_depts_dept);

/**

* 返回给定机构,下一级子机构ID集合。

* @param deptId 给定当前机构ID

* @return

* @date 2022-12-03

*/

List<String>getChildrenDeptIdOneLevel(longdeptId);

/**

* 返回给定机构,下一级子机构对象集合。

* @param deptId 给定当前机构ID

* @return

* @date 2022-12-03

*/

List<S_dept>getChildrenDeptOneLevel(longdeptId);

}

2)实现本地缓存方式

参考机构管理,这里代码略...

/**

* 基于本地内存实现的机构缓存提供者。

* @author 时克英

* @date 2022-12-05

*/

publicclassLocalDeptCacheProviderextendsAbstractCacheProvider<S_dept>implementsDeptCacheProvider {......}

3)实现Redis缓存方式

参考机构管理,这里代码略...

publicclassRedisDeptCacheProviderextendsRedisCacheProvider<String>implementsDeptCacheProvider{......}

4)添加到配置Bean

如果存在多种方式的缓存,需要分开配置文件,如:

LocalCacheConfig

注:当配置文件中,redis不可用时才会启用

@Configuration

@ConditionalOnProperty(prefix="iplatform.cache", name="redis-enabled", havingValue="false", matchIfMissing=true)

publicclassLocalCacheConfigextendsCacheConfiguration {...}

RedisCacheConfig

@Configuration

@ConditionalOnProperty(prefix="iplatform.cache", name="redis-enabled", havingValue="true", matchIfMissing=false)

@ConditionalOnClass({RedisCacheProvider.class})

@AutoConfigureAfter(RedisAutoConfiguration.class)

publicclassRedisCacheConfigextendsCacheConfiguration {...}

5)在Controller中注入使用。

三)数据库事务控制


平台对数据库事务进行封装,默认配置基本不需要项目重复配置或修改,具体规则如下:

1)在Service层控制事务,无需使用注解@Transactional标注方法

2)Service对象定义如下格式:

@Service

publicclassUserServiceImplextendsBaseServiceImpl {...}

service命名需要符合Impl后缀。

3)Service实现对象不需要定义接口,因为基本上没有第二种实现。

4)Service层中不能引用缓存对象。

四)多租户使用


一般项目都是单客户使用,如果存在多客户同时使用一套系统,则平台提供支持,只需要在业务表中增加一个“顶级单位”的字段即可,系统管理支持每个客户查看自己的后台数据,相互隔离。

如果无需多租户,则不需要顶级单位字段,那么后台管理只有一个租户,退化为单租户模式。

具体管理功能参考“系统管理”。

五)权限管理


1)权限定义

(有些又称资源定义)针对一个请求方法,即:URL,在若依中使用了“固定的权限字符串”以注解形式定义。

平台中则使用URL方式,一个用户可访问哪些URL,就能看到那些按钮(或请求)

2)权限呈现

URL完全匹配

如:添加(保存)用户,权限定义为:system:user:add,那么对应的请求路径就是:${contextPath}/system/user/add

URL部分匹配

关键字"query",如:system:user:view:query,则用户能够访问:${contextPath}/system/user/view/*,此时/system/user/view/123, /system/user/view/show都可访问,但/system/user/view/123/test就无法访问。

URL放开匹配

如:system:user:select:**,则${contextPath}/system/user/select/123, ${contextPath}/system/user/select/123/test都可访问。

该模式较为放松,在用户需求不需要按钮权限,或者某一个权限不需要细粒度的时候非常有用。否则一个请求都要添加一个按钮管理,非常繁琐。

六)数据权限


数据权限每个项目差异较大,平台会提供一些基础支持,同时提供了默认的几个实现,如:全单位、部门、个人等。同时提供一套机制让研发自己实现定制数据权限。

1)添加权限(菜单)

权限点ID必须以“data_scope,”开头,如:data_scope,dept_org,表示数据权限(本单位数据),dept_org是业务定义的真实权限名称。

2)角色权限分配

在权限分配中,选择角色需要的数据权限如图:

3)研发在业务中开发

在控制器中获取角色设置的“数据权限”,如图:

七)平台参数配置


平台提供了一种“运行参数”,可在系统运行过程中修改参数,实时生效,业务可添加自己的各类参数,并在业务中获取使用,系统在功能“参数配置”中可以管理这些参数。

使用步骤如下:

1)通过界面添加配置参数,或者通过SQL直接在表中添加:s_config

2)定义新添加的参数常量名称(key)

3)在控制器中直接根据名称(key)获取使用,示例:获取是否开启验证码

八)操作日志配置


平台实现了注解方式配置操作日志,在需要日志的方法上配置该注解即可,注解说明如下:

字段说明:

1)title:模块(或功能)名称

2)businessType:枚举类型,业务类别,详见枚举定义

3)operatorType:枚举类型,操作员类别,Manage(后台管理)、Mobile(移动端调用)、ServiceApi(为第三方提供的API接口,非管理界面)、Other(其他)

4)isSaveRequestData:是否报错请求参数

5)isSaveResponseData:是否保存响应结果

九)网关模块


目前仅实现了静态配置,后续要加上动态配置,支持必要的持久化保存等。

调用系统内部其他服务路由规则添加,服务降级支持等。

十)系统启动配置参数(application.yml)


以 iplatform 开头的配置即为平台相关初始化配置

涉及到权限控制的几个参数比较重要,其他的看注释即可。

十一)前端界面功能


略。

十二)待开发或完善


1)调度任务模块,管理界面完成,提供添加界面,并能实现手动启动等功能

2)分页查询时,无需研发调用任何方法,去掉:this.prepareSearchPage();

3)数据字典添加多级树实现。

十三)注意事项

1)注入对象,不要直接使用@AutoWired注解属性,应当在构造函数上使用。

2)系统中除了“Controller”和“ServiceImpl”可以使用注解配置Bean,其他对象一概不允许,只能通过Config类文件方式创建配置。

3)业务Controller必须继承SystemController,继承后可以直接调用一些系统方法,如:获取当前用户等。

4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas 实战:分析三国志人物

简介 背景 Pandas 是 Python 的一个工具库&#xff0c;用于数据分析。由 AQR Capital Management 于 2008 年 4 月开发&#xff0c;2009 年开源&#xff0c;最初被作为金融数据分析工具而开发出来。Pandas 名称来源于 panel data&#xff08;面板数据&#xff09;和 Python d…

基于SEIR模型的传染病预测软件开发(完整代码+数据集+报告)

1 操作页面及用户使用说明(1) 界面说明App页面主要分为4个区域&#xff0c;分别是&#xff1a;曲线显示区、模型初始化和预防参数设定区、传染病特征参数设定区、绘图控制区。① 曲线显示区&#xff1a;显示模型预测的不同人数量随时间的变化曲线。② 模型初始化和预防参数设定…

泛函分析中的向量空间

一、向量空间背景 (1) 具有如下点内积或标量内积的实数域RRR上的欧式空间RNR^NRN&#xff1a; ⟨u,v⟩uTvu0v0u1v1⋯uN−1vN−1∑i0N−1uivi\langle\boldsymbol{u}, \boldsymbol{v}\rangle\boldsymbol{u}^{\mathrm{T}} \boldsymbol{v}u_{0} v_{0}u_{1} v_{1}\cdotsu_{N-1} v_{…

SpringCloud-Netflix学习笔记——微服务和微服务架构

一、什么是微服务&#xff1f; 什么是微服务&#xff1f;微服务&#xff08;Microservice Architecture&#xff09;是近几年流行的一种架构思想&#xff0c;关于它的概念很 难一言以蔽之。究竟什么是微服务呢&#xff1f;我们在此引用 ThoughtWorks 公司的首席科学家 Martin F…

谷粒商城-高级篇-Day11-商城业务

文章目录整合thymeleaf渲染页面页面修改不重启服务器实时更新渲染二三级数据nginx-搭建域名访问环境一nginx-搭建域名访问环境二整合thymeleaf渲染页面 将index放到product的资源下的static目录&#xff0c;index.html放到templates文件夹下 导入thymeleaf <!-- 模板引擎…

【Acwing寒假2023每日一题】4700. 何以包邮?- 01背包dp至少模板

4700. 何以包邮&#xff1f; - AcWing题库 设满x元包邮&#xff0c;题目要求总价值至少x的最小价值 目录 1、一维 01背包-至少模板 至少模板和至多模板的两大区别 2、二分 二维 01背包-至多模板 &#xff08;1&#xff09;二维dp 3、逆向思维 一维 01背包-至多模板 1…

1.环境搭建 创建spring boot 项目(mac)

1.安装maven 首先你需要在maven官网上下载mac专用的二进制maven压缩包。也就是下图的这个&#xff1a; 然后&#xff0c;开始我们的配置。 1、打开终端&#xff0c;输入这个代码&#xff1a; vim ~/.bash_profile 2、然后点击键盘上的“i”&#xff0c;进入vim编辑模式&…

【BBuf的CUDA笔记】五,解读 PyTorch index_add 操作涉及的优化技术

本文把pytorch index_add算子的代码抽取出来放在&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/indexing/index_add_cuda_pytorch_impl.cu 。如果不太熟悉PyTorch的话也可以直接看这个.cu文件&#xff0c;有问题请在这个repo提issue。 0x0.…

2022,我感受到了CSDN不平凡

最初注册CSDN&#xff0c;只是因为老师的要求&#xff0c;负责教C课程的老师让同学们注册CSDN&#xff0c;并经常更新自己的博客。虽然注册了CSDN的博客&#xff0c;也写了几篇博客文章&#xff0c;可最初我并不理解老师为什么要让我们注册&#xff0c;可是随着在CSDN驻留时间的…

运行时数据区

目录 一、概述 1.1、数据区 1.2、JAVA线程数据区 二、线程 2.1、JVM线程概述 2.2、JVM系统线程 三、PC寄存器 3.1、寄存器概述 3.2、作用 3.3、常见问题 一、概述 1.1、数据区 内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间仓库及桥梁&#xff0c;承载着操…

vulnhub DC系列 DC-5

总结&#xff1a; 下载地址 DC-5.zip (Size: 521 MB)Download: http://www.five86.com/downloads/DC-5.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-5.zip使用方法:解压后&#xff0c;使用vm直接打开ova文件。 漏洞利用 信息收集 这里还是使用DC-1的方法 1.给靶…

AR Foundation

AR Session 在一个AR应用中有且只允许存在一个AR Session 包括两个组件 &#xff1a;AR Session &#xff08;用于管理 Session&#xff09;、AR Input Manager (用于管理输入的一些信息) AR Session&#xff08;用于管理 Session&#xff09; 作用&#xff1a;管理AR应用状…

01.数据的存储

1. 数据类型介绍 1&#xff09;基本的内置类型&#xff1a;char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数 2&#xff09;类型的意义&#xff1a; 使用这个类型开辟内存空间的大小&#xff…

Docker快速入门自用笔记

1. Docker - 介绍 不同Linux的内核一致。 2. Docker - 与虚拟机的不同 3. Docker - Docker架构 镜像&#xff08;只读&#xff09;&#xff1a;应用程序及其所需依赖、函数库、环境、配置等文件打包在一起&#xff0c;称为镜像。 容器&#xff1a;镜像中的应用程序运行后…

一文看懂人机对话

人机对话概述 人机对话是指&#xff0c;让机器理解和运用自然语言实现人机通信的技术&#xff0c;如图1所示&#xff0c;通过人机对话交互&#xff0c;用户可以查询信息&#xff0c;如示例中的第一轮对话&#xff0c;用户查询天气信息&#xff0c;用户也可以和机器机型聊天&am…

Pytorch深度学习【十三】

LeNet网络 基本结构图 构造思路 先用卷积层来学习图片空间信息池化层降低敏感度全连接层来转换到类别空间 代码实现 import torch from torch import nn from d2l import torch as d2l class Reshape(nn.Module):def forward(self ,x):return x.view(-1, 1, 28, 28) # vie…

ElasticSearch7 Kibana集群安装

文章目录ElasticSearch安装下载安装包基础环境安装JDK安装修改Linux配置安装ES启动报错bootstrap check failure [1] of [1]: memory locking requested for elasticsearch process but memory is not lockedKibana安装Kibana简介Kibana下载Kibana安装ElasticSearch安装 下载安…

RS485接口电路设计

RS485接口是串口的一种&#xff0c;常常用在一些工业控制中&#xff0c;485通信是半双工的通信&#xff0c;一条总线最多可连接256个485设备。RS485信号速率最高可以到10Mbps&#xff0c;传输距离最大能到1000多米485接口包含一对差分信号A和B&#xff0c;如下图所示RS485标准规…

springcloud3 Nacos的集群搭建

一 nacos的集群搭建说明 1.1 版本选择的说明 本案例采用的版本是1.4.2 &#xff0c;当选用其他版本均有不同的问题&#xff1a; 1.4.4 nginx代理后&#xff0c;输入密码登录进去。 2.2.0 &#xff0c;2.1.2等 2.x版本均是 3个节点的启动之后&#xff0c;只能访问一个节点。…

David Murray 加入 VeraViews 担任需求总监

近日&#xff0c;VeraViews宣布任命 David Murray 为需求总监。 VeraViews 是一个旨在提供透明和可审计的无效流量 (IVT) 预防的广告技术平台&#xff0c;很高兴地宣布任命David Murray为 VeraViews 需求总监。 大卫是伦敦的一位商业专家&#xff0c;他在英国许多最大、商业上…