RuoYi-Cloud-Plus releases version 2.1.2 2023, the last version


Change log

Dependency upgrade

  • update springboot 3.1.5 => 3.1.7

  • update springboot 2.7.17 => 2.7.18 (extended service upgraded to boot2 final version)

  • update mybatis-boot 3.0.2 => 3.0.3 Optimize dependency transfer

  • update powerjob 4.3.3 => 4.3.6

  • update easyexcel 3.3.2 => 3.3.3

  • update transmittable-thread-local 2.14.2 => 2.14.4

  • update justauth 1.16.5 => 1.16.6

  • update redisson 3.24.1 => 3.24.3 Fix subscription restart connection timeout issue

  • update easy-es 1.1.1 => 2.0.0-beta4

Feature updates

  • update optimizes oss remote calling to support downgrade processing

  • update optimizes and enriches RedisUtils’ operations on List Set types

  • update optimizes the admin module to add a separate ratelimiter module

  • update optimizes the verification code interface and adds current limiting configuration

  • update optimizes excel merge annotations to determine subsequent column merges based on the results of the first merged column (thanks to Simple)

  • update optimize SocialUtils code

  • update optimizes and deletes useless exception classes

  • update Optimize and complete the internationalization of three-party login verification

  • update optimizes the SMS component to reserve automatic configuration classes

  • update updates the description about the database

  • update optimizes the SMS component to reserve automatic configuration classes

  • update Optimize and change the OSS configuration to global mode to reduce the difficulty of use and retain the SQL to facilitate user expansion (conventional projects do not need to configure multi-tenancy)

  • update optimizes and refines oss configuration management permission control

  • update optimizes and turns on redisson script caching to reduce network transmission

  • update optimizes and deletes the configuration of hikaricp that is not officially recommended. The jdbc4 protocol comes with a verification method.

  • update optimization reduces unnecessary query optimization performance of PlusSaTokenDao

  • update Optimize update user exception prompts to use login account

  • update optimizes the use of logged in users to determine whether to log in to improve efficiency

  • update Optimize and reconstruct LoginHelper to encapsulate local storage code operations

  • update optimizes getTenantId to determine whether to enable multi-tenancy

  • update optimizes Dockerfile and uses shell mode to support passing environment variables into jvm parameters

  • update Optimize WebSocketUtils connection closing and change it to warning

  • update optimizes excel multi-sheet export (thanks May)

  • update optimizes and deletes useless interface implementations

  • update optimizes jvm parameter adjustment and fully enables zgc

  • update optimizes the use of dynamic tenants to reconstruct business logic for tenants

  • update optimizes TenantHelper to support functional methods for dynamic tenants

  • update optimizes support for multi-tenant binding with the same three-party login

  • update optimizes the method of updating user login information to ignore data permissions

  • update optimizes and completes the three-party binding time field and deletes useless excel annotations

  • update optimizes the extraction of login records to the listener for unified processing

  • update optimizes login message push exception interception (it will not be delayed if the resource is not started)

  • update optimizes the ignoreTable method of the tenant plug-in to support dynamic tenants

new features

  • add new RedisUtils.setObjectIfExists set method if it exists

  • add adds rich RedisUtils operations on List Set type

  • add New translation component user nickname translation implementation

  • add New response encryption function supports annotation to force encryption of interface data (Thanks to MichelleChung)

  • add a new common-ratelimiter current limiting module for customizing business current limiting and does not conflict with sentinel

Bug fixes

  • fix Fixed the issue of authentication inconsistency caused by the stream-mq test service not importing the tenant module

  • fix: Fix the error reported by seata when using zgc (restore all alibaba components for unknown reasons)

  • fix: Sentinel image adds redundant interface parameters

  • fix Fix the problem that the registration interface acquisition switch is not within the tenant scope

  • fix fix seata-server logback version conflict problem

  • fix Fix selectDictTypeByType query method error problem

  • fix: Fix the problem that some abnormal classes cannot be loaded and report errors

  • fix Fix the powerjob sql script's escape character problem for other databases (thanks branches)

  • fix Fix MybatisSystemException null pointer problem

  • fix: The excel merge annotation will determine subsequent column merging based on the result of the first merged column.

  • fix: Fix the problem of session sharing and coverage by multiple accounts and change it to independent storage of tokenSession.

  • fix Fix the problem of obtaining null user when logging in after the token expires

  • fix: Fix the problem that the higher version of nginx in powerjob deployment scheme does not take effect

  • fix Fix the problem of multiple concurrent creation instances of OssFactory

  • fix: the service of the delay queue crashes before the delivery time of the message arrives, causing the message to not be received after restarting

Front-end changes

  • update optimizes the user avatar img variable without determining the type problem

  • update optimizes and refines oss configuration management permission control

  • update optimizes explicit packaging commands

  • Warnings in update optimization code

  • update optimizes the front-end whitelist page release logic

  • Update optimization page description about permission identifiers

  • fix Fix append-to-body writing error (thanks to Ai3_Liu Xiaolong)

  • fix component cache is not cleared when closing the dynamic routing tab (thanks to NickLuo)

  • fix remove duplicate environment variable ElUploadInstance (thanks Cotton)

  • fix Fixed the problem of console warning when online users force push button click to cancel

  • fix: Fix the problem of warning when using default style in dictionary

Platform introduction

RuoYi-Cloud-Plus 微服务通用权限管理系统rewrites RuoYi-Cloud to fully upgrade (not compatible with the original framework)

The project code and documents are all open source, free and can be used commercially. Just follow the open source agreement and keep the open source agreement files in the project.
Live until you are old and write until you are old. Open source for interest. Open source for learning. Open source for everyone to truly learn technology.

System demonstration: https://plus-doc.dromara.org/#/common/demo_system

Front-end project address: https://gitee.com/JavaLionLi/plus-ui

Document address: https://plus-doc.dromara.org

Functional differences between this framework and RuoYi

Function this framework RuoYi
Front-end project Rewrite
Vue3 + TS + ElementPlus based on the vue3-element-admin open source project
Based on Vue2/Vue3 + JS
Backend project structure Structural decoupling in the form of plug-ins + expansion packs for easy expansion Modules are injected into each other and coupling is seriously difficult to expand.
Backend code style Code formatting that strictly adheres to Alibaba specifications and unified project configuration Code writing is different from conventional structures, causing reading difficulties
Distributed registration center Using Alibaba Nacos source code integration to facilitate debugging extensions and secondary development framework, various monitoring has been added to it. Using Alibaba Nacos to build a purely official version by yourself is unreliable
Distributed configuration center Using Alibaba Nacos source code integration to facilitate debugging extensions and secondary development framework, various monitoring has been added to it. Using Alibaba Nacos to build a purely official version by yourself is unreliable
service gateway The SpringCloud Gateway framework is used to extend a variety of functions
, such as: intranet authentication, request body caching, cross-domain configuration, request response log, etc.
Using SpringCloud Gateway has a single function
load balancing The SpringCloud Loadbalancer extension supports development team routing to facilitate multi-team development and debugging. Using SpringCloud Loadbalancer has a single function
RPC remote call Using the new Apache Dubbo 3.X, it goes without saying that it has a long history. Using the feign writing method with limited functions, the network fluctuates greatly and is unstable.
Distributed current limiting fuse Using Alibaba Sentinel source code integration to facilitate debugging extensions and secondary development framework, it also adds various monitoring Using Alibaba Sentinel to build a purely official version by yourself is unreliable
Distributed transactions Using Alibaba Seata source code integration to connect Nacos and various monitoring to simplify the construction and deployment process Using Alibaba Seata to build a purely official version by yourself is cumbersome and Nacos is not linked to the strange usage methods in the code.
Web container Using Undertow, a high-performance container based on XNIO Using Tomcat
Authority authentication Using Sa-Token and Jwt, static use, complete functions, low coupling and high scalability Spring Security has cumbersome configuration and extremely poor scalability
Permission annotation Use Sa-Token to support annotation login verification, role verification, permission verification, secondary authentication verification, HttpBasic verification, ignore verification.
Role and permission verification supports multiple conditions such as AND ORor 权限 OR 角色and other complex expressions
Only supports whether there is a match
Relational database support Native support for MySQL, Oracle, PostgreSQL, SQLServer and
heterogeneous switching can be used at the same time
Supports Mysql and Oracle. Simultaneous use and heterogeneous switching are not supported.
cache database Supports Redis 5-7 and supports most new features such as distributed current limiting and distributed queues Redis simple get set support
Redis client Adopt Redisson Redis officially recommends client tools based on Netty.
Supports more than 90% of Redis commands. The underlying optimization avoids many incorrect usages. For example: keys are converted to scan.
Supports stand-alone, sentinel, single-master cluster, multi-master cluster and other modes.
Lettuce + RedisTemplate supports few modes and the tools are cumbersome to use.
The connection pool uses common-pool, which often causes problems due to bugs.
Caching annotations The Spring-Cache annotation is used to extend the implementation and support more functions
, such as expiration time, maximum idle time group, maximum length, etc. Only one annotation is needed to complete automatic data caching.
Redis code logic needs to be written manually
ORM framework Using Mybatis-Plus, it is object-based with almost no need to write SQL and full Java operation. There are many powerful plug-ins,
such as multi-tenant plug-in, paging plug-in, optimistic lock plug-in, etc.
Using Mybatis based on XML requires handwritten SQL
SQL monitoring Use p6spy to output complete SQL and execute time monitoring Log output requires manual splicing of sql and parameters, and debugging problems cannot be quickly viewed
Data paging The Mybatis-Plus paging plug-in
framework is used to extend it. The object-based paging object supports multiple ways of passing parameters. It supports front-end multi-sorting and complex sorting.
Using PageHelper only supports single query. Pagination parameters can only be passed from param. Only single sorting function is available. Poor scalability and poor experience.
data permission Use the Mybatis-Plus plug-in to self-analyze and splice SQL. Non-inductive filtering.
Just set the annotation conditions for the Mapper. Supports multiple customizations and is not limited to department roles.
Using annotations + aop to generate SQL based on department roles has poor compatibility and does not support other business extensions.
After generating SQL, it needs to be manually spliced ​​into specific business SQL. It does not work for multiple Mapper queries.
Data desensitization Using annotations + jackson desensitization during serialization supports different desensitization conditions for different modules. Supports
multiple strategies such as ID cards, mobile phone numbers, addresses, email addresses, bank cards, etc. and can be expanded by itself.
none
Data encryption and decryption Use annotations + mybatis interceptor to automatically encrypt and decrypt data during data access.
Supports multiple strategies such as BASE64, AES, RSA, SM2, SM4, etc.
none
Data translation Use annotations + jackson to dynamically modify data for translation during serialization.
Support multiple modes: 映射翻译 直接翻译 其他扩展条件翻译custom expansion can be completed in two steps through interface and built-in multiple translation implementations
none
Multiple data source framework Use dynamic-datasource to support most databases in the world.
You can dynamically manage heterogeneous databases of different types through yml configuration. You can also add data sources through the front-end page.
Support spel expressions to switch data sources from request header parameters and other conditions.
Manually writing code to configure data sources based on druid is cumbersome and has poor support.
Multiple data source transactions Use dynamic-datasource to support different types of database transaction rollback from multiple data sources not support
Database connection pool Using HikariCP Spring's official built-in connection pool, the configuration is simple and famous for its performance and stability. Adopt druid bugs, many community maintenance, poor activity and low configuration, many cumbersome configurations, average performance
Database primary key Using Snowflake ID to grow unique IDs in an orderly manner based on timestamps, you no longer have to worry about merging primary key conflicts and duplication of data in sub-databases and sub-tables. Uses database auto-increment ID to support limited data volume and does not support unique primary keys from multiple data sources.
WebSocket protocol The WebSocket protocol encapsulated by Spring extends Token authentication and distributed session synchronization. It is no longer just a waste based on a single machine. none
Serialization Using Jackson Spring’s official built-in serialization is reliable!!! Using fastjson bugjson is famous far and wide
Distributed idempotence Refer to the simplified implementation of Meituan GTIS anti-gravity system (see the document for details) Manually written annotations are implemented based on aop
Distributed task scheduling Using PowerJob, it naturally supports distributed and unified management center. The bottom layer is based on JPA and supports multiple databases. Using Quartz, a cluster with poor database lock performance requires a lot of configuration and modifications.
Distributed log center Use ELK's industry-proven solution to collect the running logs of all services in real time to quickly identify and locate problems. none
Distributed search engine Use ElasticSearch, Easy-Es and Mybatis-Plus to operate ElasticSearch none
Distributed message queue Using SpringCloud-Stream to support Kafka, RocketMQ, RabbitMQ none
Sub-database and sub-table function Adopting Apache Sharding-Proxy proxy service without intrusion to support sharding of databases and tables. You only need to write rules for sharding databases and tables. none
File storage Using Minio distributed file storage, it inherently supports multi-machine, multi-hard disk, multi-shard, and multi-copy storage.
It supports permission management and is safe and reliable. Files can be encrypted for storage.
Using native files to store naked files is easy to lose and leak. It does not support clusters and has a single point effect.
cloud storage 采用 AWS S3 协议客户端 支持 七牛、阿里、腾讯 等一切支持S3协议的厂家 不支持
短信 支持 阿里、腾讯 只需在yml配置好厂家密钥即可使用 接口化支持扩展其他厂家 不支持
邮件 采用 mail-api 通用协议支持大部分邮件厂商 不支持
接口文档 采用 SpringDoc、javadoc 无注解零入侵基于java注释
只需把注释写好 无需再写一大堆的文档注解了
采用 Springfox 已停止维护 需要编写大量的注解来支持文档生成
校验框架 采用 Validation 支持注解与工具类校验 注解支持国际化 仅支持注解 且注解不支持国际化
Excel框架 采用 Alibaba EasyExcel 基于插件化
框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等
基于 POI 手写实现 功能有限 复杂 扩展性差
工具类框架 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码 手写工具稳定性差易出问题 工具数量有限 代码臃肿需自己手写 get set 等
服务监控框架 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制
实时监控服务状态 框架还为其扩展了在线日志查看监控
全方位监控报警 采用 Prometheus、Grafana 多样化采集 多模板大屏展示 实时报警监控 提供详细的搭建文档
链路追踪 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗
用了它即可实时查看请求经过的每一处每一个节点
代码生成器 只需设计好表结构 一键生成所有crud代码与页面
降低80%的开发量 把精力都投入到业务设计上
框架为其适配MP、SpringDoc规范化代码 同时支持动态多数据源代码生成
代码生成原生结构 只支持单数据源生成
部署方式 支持 Docker 编排 一键搭建所有环境 让开发人员从此不再为搭建环境而烦恼 原生jar部署 其他环境需手动下载安装 自行搭建
项目路径修改 提供详细的修改方案文档 并为其做了一些改动 非常简单即可修改成自己想要的 需要做很多改造 文档说明有限
国际化 基于请求头动态返回不同语种的文本内容 开发难度低 有对应的工具类 支持大部分注解内容国际化 只提供基础功能 其他需自行编写扩展
代码单例测试 提供单例测试 使用方式编写方法与maven多环境单测插件 只提供基础功能 其他需自行编写扩展
Demo案例 提供框架功能的实际使用案例 单独一个模块提供了很多很全

本框架与RuoYi的业务差异

业务 功能说明 本框架 RuoYi
租户管理 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等 支持
租户套餐管理 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等 支持
用户管理 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等 支持 支持
部门管理 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限 支持 支持
岗位管理 配置系统用户所属担任职务 支持 支持
菜单管理 配置系统菜单、操作权限、按钮权限标识等 支持 支持
角色管理 角色菜单权限分配、设置角色按机构进行数据范围权限划分 支持 支持
字典管理 对系统中经常使用的一些较为固定的数据进行维护 支持 支持
参数管理 对系统动态配置常用参数 支持 支持
通知公告 系统通知公告信息发布维护 支持 支持
操作日志 系统正常操作日志记录和查询 系统异常信息日志记录和查询 支持 支持
登录日志 系统登录日志记录查询包含登录异常 支持 支持
文件管理 系统文件展示、上传、下载、删除等管理 支持
文件配置管理 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理 支持
在线用户管理 已登录系统的在线用户信息监控与强制踢出操作 支持 支持
定时任务 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等 支持 仅支持任务与日志管理
代码生成 多数据源前后端代码的生成(java、html、xml、sql)支持CRUD下载 支持 仅支持单数据源
系统接口 根据业务代码自动生成相关的api接口文档 支持 支持
服务监控 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等 支持 仅支持单机CPU、内存、磁盘监控
缓存监控 对系统的缓存信息查询,命令统计等。 支持 支持
在线构建器 拖动表单元素生成相应的HTML代码。 支持 支持
使用案例 系统的一些功能案例 支持 不支持

Guess you like

Origin www.oschina.net/news/272161