作者AI全栈程序猿来源今日头条通常我们可以在前端通过防抖和节流来解决短时间内请求重复提交的问题,如果因网络问题、Nginx重试机制、微服务Feign重试机制或者用户故意绕过前端防抖和节流设置,直接频繁发起请求,都会导致系统防重请求失败,甚至导致后台产生多条重复记录,此时我们需要考虑在后台增加防重设置。考虑到微服务分布式的场景,这里通过使用Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求的功能,基...
2022-04-26 23:52:05 7311浏览 0点赞 0回复 1收藏
作者AI全栈程序猿来源今日头条一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需要对日志数据进行处理与分析,基于E(ElasticSearch)L(Logstash)K(Kibana)组合的日志分析系统可以说是目前各家公司普遍的首选方案。Elasticsearch:分布式、RESTful风格的搜索和数据分析引擎,可快速存储、...
2022-04-26 23:44:32 7260浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条针对业务开发人员通常面对的业务需求,我们将日志分为操作(请求)日志和系统运行日志,操作(请求)日志可以让管理员或者运营人员方便简单的在系统界面中查询追踪用户具体做了哪些操作,便于分析统计用户行为;系统运行日志又分为不同的级别(Log4j2):OFFFATALERRORWARNINFODEBUGTRACEALL,这些日志级别由开发人员在代码编写时确定,并编写在代码中,系统运行时记录,方便系统开发人员分析定位解决问题...
2022-04-26 23:23:10 1.9w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ、RocketMQ、RabbitMQ、Kafka,Stream等,这些消息中间件的实现都各有优劣。在进行框架设计的时候,我们考虑是否能够和之前实现的短信发送、分布式存储等功能一样,抽象统一消息接口,屏蔽底层实现,在用到消息队列时,使用统一的接口代码,然后在根据自己业务需...
2022-04-26 23:07:22 8497浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条一、集群环境规划配置生产环境不要使用一主多从,要使用多主多从。这里使用三台主机进行测试一台Master(172.16.20.111),两台Node(172.16.20.112和172.16.20.113)1、设置主机名CentOS7安装完成之后,设置固定ip,三台主机做相同设置vietcsysconfignetworkscriptsifcfgens33在最下面ONBOOT改为yes,新增固定地址IPADDR,172.16.20.111,172.16.20.112,172.16.20.113ONBOOTyesIPADDR172.16.20.111三...
2022-04-26 22:53:01 8859浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条SpringCloud微服务包含多个SpringBoot可运行的应用程序,在单应用程序下,版本发布时的打包部署还相对简单,当有多个应用程序的微服务发布部署时,原先的单应用程序部署方式就会显得复杂且不可控。那么我们就会思考使用简单的部署方式,解决自动化发布、自动化部署、微服务监控等问题。 我们使用目前行业通用的解决方案,Jenkins+GitLab+Maven+Docker+Kubernetes来实现可持续自动化部署微服务...
2022-04-26 22:16:31 1.2w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了ZipkinPinpointCAT的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫OpenTracing的组织,旨在推进调用链监控的一些规范和标准工作。1、下载Skywalking,下载地址:https:skywalking.apache.orgdownloadsdownloadthelatestversions,根据需求选择...
2022-04-26 22:01:54 1.2w浏览 1点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条一、新建数据源配置因考虑到多数据源问题,代码生成器作为一个通用的模块,后续可能会为其他工程生成代码,所以,这里不直接读取系统工程配置的数据源,而是让用户自己维护。参数说明数据源名称:用于查找区分数据源的名称连接地址:连接方式:数据库类型:数据库地址等参数,例:jdbc:mysql:127.0.0.1giteggcloudzeroDateTimeBehaviorconvertToNull&useUnicodetrue&characterEncodingutf8&allowMult...
2022-04-26 21:55:59 7265浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条理想的情况下,代码生成可以节省很多重复且没有技术含量的工作量,并且代码生成可以按照统一的代码规范和格式来生成代码,给日常的代码开发提供很大的帮助。但是,代码生成也有其局限性,当牵涉到复杂的业务逻辑时,简单的代码生成功能无法解决。目前市面上的代码生成器层出不穷,大多数的原理是基于已有的代码逻辑模板,按照一定的规则来生成CRUD代码。至于更为复杂的代码生成大家都在人工智能领...
2022-04-26 21:48:39 9698浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条批量上传数据导入、数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel。EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目,在尽可能节约内存的情况下支持读写百M的Excel:Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题...
2022-04-26 21:37:25 1.5w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条微服务应用中图片、文件等存储区别于单体应用,单体应用可以放到本地读写磁盘文件,微服务应用必须用到分布式存储,将图片、文件等存储到服务稳定的分布式存储服务器。目前,很多云服务商提供了存储的云服务,比如阿里云OSS、腾讯云COS、七牛云对象存储Kodo、百度云对象存储BOS等等、还有开源对象存储服务器,比如FastDFS、MinIO等。如果我们的框架只支持一种存储服务,那么在后期扩展或者修改时会...
2022-04-26 20:46:08 8837浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展MybatisPlus的插件DataPermissionInterceptor实现数据权限控制。简单介绍一下,所谓功能权限,顾名思义是指用户在系统中拥有对哪些功能操作的权限控制,而数据权限是指用户在系统中能够访问哪些数据的权限控制,数据权限又分为行级数据权限和列级数据权限。数据权...
2022-04-26 20:36:05 2.1w浏览 0点赞 1回复 0收藏
作者AI全栈程序猿来源今日头条读写分离:为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。目前有多种方式实现读写分离,一种是Mycat这种数据库中间件,需要单独部署服务,通过配置来实现读写分离,不侵入到业务代码中;还有一种是dynamicdatasourceshardingspherejdbc这种,需要在业务代码引入jar包进行开发。本...
2022-04-26 20:28:14 1.4w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条我们系统集成了短信通知服务,这里我们进行OAuth2的扩展,使系统支持短信验证码登录。1、在giteggoauth中新增SmsCaptchaTokenGranter自定义短信验证码令牌授权处理类短信验证码模式publicclassSmsCaptchaTokenGranterextendsAbstractTokenGranter{privatestaticfinalStringGRANTTYPE"smscaptcha";privatefinalAuthenticationManagerauthenticationManager;privateUserDetailsServiceuserDetailsSer...
2022-04-26 20:09:37 6444浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条目前系统集成短信似乎是必不可少的部分,由于各种云平台都提供了不同的短信通道,这里我们增加多租户多通道的短信验证码,并增加配置项,使系统可以支持多家云平台提供的短信服务。这里以阿里云和腾讯云为例,集成短信通知服务,并且能够根据不同的租户选择对应的短信渠道。1、在GitEggPlatform中新建giteggplatformsms基础工程,定义抽象方法和配置类SmsSendService发送短信抽象接口:短信发送接口...
2022-04-26 20:01:46 6798浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条随着近几年技术的发展,人们对于系统安全性和用户体验的要求越来越高,大多数网站系统都逐渐采用行为验证码来代替图片验证码。GitEggCloud集成了开源行为验证码组件和图片验证码,并在系统中添加可配置项来选择具体使用哪种验证码。AJCaptcha:行为验证码EasyCaptcha:图片验证码1、在我们的giteggplatformbom工程中增加验证码的包依赖<!AJCaptcha滑动验证码><captcha.version>1.2.7<captcha.versio...
2022-04-26 19:55:09 1.1w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间、限定范围访问指定资源。OAuth2中使用token验证用户登录合法性,但token最大的问题是不携带用户信息,资源服务器无法在本地进行验证,每次对于资源的访问,资源服务器都需要向认证服务器发起请求,一是验证token的有效性,...
2022-04-26 16:45:09 1.4w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条多租户技术的基本概念:多租户技术(英语:multitenancytechnology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。在云计算的加持之下,多租户技术被广为运用于开发云各式服务,不论是IaaS,PaaS还是SaaS,都可以看到多租户技术的影子。前面介绍过GitEgg框架与数据库交互使用了Mybatis增强工具MybatisP...
2022-04-26 16:31:58 1.1w浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限(如下图),从而达到用户和权限解耦的目的。RABC的好处1.职能划分更谨慎。对于角色的权限调整不仅仅只影响单个用户,而是会影响关联此角色的所有用户,管理员下发回收权限会更为谨慎;2.便于权限管理。对于批量的用户权限调整,只...
2022-04-26 16:23:40 7796浏览 0点赞 0回复 0收藏
作者AI全栈程序猿来源今日头条这章我们来介绍在系统中引入redissonspringbootstarter依赖来实现redis缓存管理1、在GitEggPlatform中新建giteggplatformredis用于管理工程中用到的Redis公共及通用方法。<!redissonRedis客户端><dependency><groupId>org.redisson<groupId><artifactId>redissonspringbootstarter<artifactId><dependency>2、在giteggplatformbom的pom.xml文件中添加giteggplatformredis<!giteggcache自定义扩展><...
2022-04-26 16:18:02 5722浏览 0点赞 0回复 0收藏