A叶子叶
大数据平台、数据仓库、数据分析/挖掘、应用开发、深度学习、爬虫
展开
-
SpringBoot实践(二十三):MybatisPlus代码生成器使用
一般在业务逻辑代码编写前的最重要步骤是进行关系模型的构建,也就是数据库表的设计,完成表设计后建立与Entity的对应关系、视图层VO设计、Mapper接口、Service服务、IMPI实现,如果使用MybatisPlus,可以使用代码生成器按照数据库配置扫描数据库完成上面所有工作,唯一要做的是在IMPL中定制化业务代码;...原创 2022-07-11 13:32:53 · 598 阅读 · 0 评论 -
SpringBoot实践(二十二):一文搞懂多线程和线程池使用
当我们完成业务逻辑开发,把jar包发布到环境中启动,就是在该主机上拉起了1个进程,该进程会进行系统调用监听端口请求,返回计算结果,同一代码段(或者方法),比如用户登录方法在同时刻可以有多个请求过来,每个请求就是1个处理线程,线程是CPU的最小处理单元,可以把进程比作工厂,线程是流水线,工厂包含原材料、启动/关闭多个流水线、输出产物。......原创 2022-07-11 10:55:21 · 617 阅读 · 0 评论 -
若依笔记(四):代码生成器
已知使用MyBatisPlus代码生成器可以自动生成Entity、Mapper、Service、Controller代码,前提是数据库中有数据表,生成pojo类以及对于该数据表的增删改查命令的代码,若依更进一步能选择表后生成代码、预览、下载,同时可以生产前端代码,与后端一起还能实现权限管理和数据隔离。原创 2023-11-02 17:45:03 · 885 阅读 · 0 评论 -
若依笔记(三):权限控制与数据隔离
已知若依单体的前端采用vue-element-admin,在前端的专栏系列vue-element-admin的动态路由已详细拆解,其最大特点是使用后端返回数据控制前端菜单,每次接口请求前会有路由拦截来获取权限和菜单列表并重新渲染页面,配合若依后端自己实现的数据权限切面,能够实现很好地的数据隔离和权限隔离,那么现在就从代码层面分析其实现;原创 2023-11-02 13:53:51 · 2352 阅读 · 0 评论 -
若依笔记(二):若依和芋道对比
国外卷技术,国内卷业务,做管理业务通常使用开源框架就可以快速满足,若依和芋道都是开源二开工具较为流行的框架,芋道是基于若依的,基本上是开发人员自己写业务开发框架的天花板,两者的前端都是基于vue-element-admin的,使用Gitee上两者的SpringBoot的最轻量化版本进行对比学习,分别是ruoyi-admin和ruoyi-vue-pro-master;和和。原创 2023-10-24 18:05:21 · 3153 阅读 · 1 评论 -
若依笔记(一):本地启动与二次开发
若依的前后端分离版本中前端用的是vue-element-admin,它把菜单放在库中控制,后端用security权限管理,代码生成器是亮点,权限能控制到目录/菜单/按钮级别,对于一般开发人员来说不难,难在UI与需求定制化。原创 2023-08-23 15:38:15 · 638 阅读 · 0 评论 -
SpringBoot实践(四十五):数据源DataSource的动态代理
真实场景中假如有针对某个组件的状态来判断是否对数据源DataSource初始化或者移除,也就是动态地实例化DataSource的需求,经典场景是我们纳管多个数据库,如果管理平台或者主机层面有问题,那么我们不对数据库进行管理了,把某个数据源给剔除,或者我们在数据源的某个方法进行一些功能增强,就需要这么个实现。动态代理是运行态时候生效的,不是预编译成class代码后加载到jvm内存中后实现的,因此动态代理比较耗费内存;原创 2023-06-01 14:40:52 · 714 阅读 · 0 评论 -
SpringBoot实践(四十四):应用开发编程规范总结
本节内容基于个人应用开发经验总结,场景特指对于库的CURD操作,有脑就行,内容包括controller对外提供的接口返回规范、serviceImpl返回规范、Pojo类定义及序列化规范、开发中对于数据处理规范;原创 2023-05-29 17:34:24 · 1072 阅读 · 0 评论 -
SpringBoot实践(四十三):整理面试常问的问题
starter机制基于约定大于配置原则,当项目中配置了特定的starter后会自动导入相关的依赖并配置好bean对象无需手动配置,其使用是java的spi原则,自动加载maven或gradle依赖中的META-INF的spirng.factories下的自动配置类,从而把自动配置类中的bean加载到容器中;此类提供线程局部变量。@Autowired按照byType注入;本质没有大的区别,在加载到beanFactory中的顺序没有差别,只是对外的含义有差别,告诉使用者部分是servie,部分是pojo;原创 2023-05-27 15:36:33 · 1020 阅读 · 0 评论 -
SpringBoot实践(四十二):常用的PostProcessor后置处理器与Aware接口
在BeanFactory的创建过程中有很多对外提供的扩展点,就是xxxPostProcessor接口和各种xxxAware接口了,在真实生产中用处极大,可以让我们自定义某些beanDefinition或者某个Bean的属性,或者我们直接拿到SpringContext容器实例化后的对象;原创 2023-05-27 14:10:17 · 508 阅读 · 0 评论 -
SpringBoot实践(四十一):循环依赖和三级缓存
一级缓存中的对象是可以直接使用的,二级和三级缓存中的对象是进行了实例化但是还没有进行初始化的对象,三个缓存是一个factory工程;在bean实例化后的下一步就是填充属性了,如果有循环依赖怎么处理呢,待续。原创 2023-05-27 13:54:37 · 237 阅读 · 0 评论 -
框架源码中常见的设计模式
学习设计模式的目的是让代码更加高效和优雅,光看定义很模糊,结合代码看就比较好理解,这里总结spring等框架种常用的设计模式及代码说明,持续补充;原创 2023-03-31 14:17:01 · 652 阅读 · 1 评论 -
ThreadLocal概念及jdbc场景使用
ThreadLocal类提供线程局部变量。 这些变量不同于它们的普通对应变量,因为每个(通过其get或set方法访问的)线程都有自己的、独立初始化的变量副本。 ThreadLocal实例通常是希望将状态与线程相关联的类中的私有静态字段(例如,用户 ID 或事务 ID),本文中调介绍其概念及jdbc场景使用原创 2023-03-30 14:56:58 · 725 阅读 · 0 评论 -
记1次生产环境java进程内存泄漏问题定位(使用Arthas)
记1次生产环境Java内存泄漏问题定位(使用Arthas),堆外内存溢出;原创 2023-03-30 12:53:11 · 5268 阅读 · 2 评论 -
SpringBoot实践(四十):配置Vertica和Mysql多数据源
SpringBoot本质上是个脚手架,类似vue-cli,把常用的功能写入application.properties,或者把外部需要的包通过starter机制引入,就会把这些bean实例化到容器内直接使用,如果想使用DataSource数据源只要在application.properties配置数据源就行,因为SpringBoot的spring.factories会自动加载这几个关于数据源的实例对象,这几个实例对象直接读取配置加载原创 2023-02-24 09:33:57 · 873 阅读 · 0 评论 -
SpringBoot实践(三十九):如何使用AOP
面向切面(AOP) 是spring重要特性,在功能上切面编程是面向对象编程的很好的补充,面向对象强调封装和开闭原则,如果多个对象有通用行为和方法,将造成很多冗余代码,AOP将通用功能作为切面插入到业务逻辑中(如通用的日志打印,异常处理,license判断等)抽取通用逻辑,减少代码冗余,并且无侵入地修改代码,在实现层面上都是通过动态代理实现,默认cglib方式,原创 2023-01-13 22:21:49 · 1039 阅读 · 3 评论 -
SpringBoot实践(三十八):自定义spring-boot-starter
测试自定义starter包,该starter包中引入springboot的自动配置依赖,配置spring.factories文件中的自动加载类,实现的功能是在测试的springBoot工程中引入自定义的starter包的pom依赖后,能够调用starter包中的某些实例方法,具体而言是读取application.properties或者application.yml的配置输出;原创 2023-01-11 16:32:04 · 942 阅读 · 4 评论 -
SpringBoot实践(三十七):Bean的生命周期
了解springBoot启动过程能够帮助我们快速熟悉/集成/定制化第三方依赖包,快速地上手搭建工程,在实际上要完成比较复杂的业务代码,还需要继续探索bean的生命周期管理,并且能够在bean的生命周期内增加各种自定义的逻辑,bean的生命周期包括:创建,使用,销毁。bean的使用大家一般都比较熟悉,但最重要的是bean的创建过程,也就是跟随springBoot启动中加载bean的过程。;原创 2023-01-05 14:42:56 · 694 阅读 · 0 评论 -
SpringBoot实践(三十六):动态代理和反射
动态代理从大的讲是动态语言特性,JAVA作为需要编译才能运行的静态语言,动态代理机制可以为JAVA提供在运行态时对某些对象进行功能增强,Spring中如果有对象使用了AOP相关注解,那么在bean进行实例化后会将对应的动态代理对象放在bean工厂,动态代理有2种实现方式:实现JDK原生动态代理接口,或者使用cglib实现,在默认情况下 Spring AOP 会采用 Java 动态代理实现,而当该类没有对应接口时才会使用 CGLib 动态代理实现。原创 2023-01-05 12:37:10 · 1173 阅读 · 0 评论 -
SpringBoot实践(三十五):JVM信息分析
JVM分析可以也可以使用,那么什么时候用到jvm信息分析呢,一般生产测试环境,能够最大化将问题暴露,但是总有些问题只有生产运行很长时间后才会被发现,jvm分析经常用于运行了很久的系统有异常情况时的调优,比如堆内存本身分配不合理,新生代中eden比例太低等。原创 2022-12-30 13:56:14 · 941 阅读 · 0 评论 -
SpringBoot实践(三十四):Gradle的使用
gradle-wrapper会绑定一个版本的gradle,在gradle-wrapper.properties中,如6.1版本绑定的是6.4.1版本的gradle,其默认会下载对应版本的gradle,使用 GRADLE_USER_HOME作为包的本地仓库,gradle-wrapper.properties 文件记录:当前项目想使用的 gradle 版本?去哪里下载这个版本的 gradle?Gradle没有依赖包管理功能,它本地保存的是依赖缓存,没有本地仓库的概念,想在Gradle里加一个私有依赖比较麻烦;原创 2022-11-07 18:11:51 · 815 阅读 · 0 评论 -
SpringBoot实践(三十三):Maven使用及POM详解
Maven是一个Java工程的管理工具,跟其相同功能的工具如Gradle,Maven通过项目对象模型(POM:Project Object Model)用来描述整个项目,也就是POM.xml文件,使用Maven能够方便的管理JAR包依赖,Maven将当前工程需要的JAR 包从远程仓库下载到本地并自动完成依赖的传递,每个JAR有唯一标识也就是坐标,这是依赖可维护性的基础,Maven中的坐标是通过groupId、artifactId、version、packaging、classfier等这些元素定义。mave原创 2022-11-06 00:59:32 · 1233 阅读 · 0 评论 -
SpringBoot实践(三十二):5分钟搭建springboot单体应用开发框架
熟悉语言和开发工具上基础快速使用框架构建应用是个机械工作,5分钟完成开发准备工作,没有冗余动作。原创 2022-09-05 15:03:51 · 1048 阅读 · 3 评论 -
SpringBoot实践(三十一):微服务改造
前面内容包括后端技术框架,以及前端框架选型,即完成单体应用的基本条件,从这里开始进行微服务化改造,后续进行流水线打包(CICD),docker容器化改造,打造成面向真实生产场景的完整解决方案;原创 2022-09-02 16:03:51 · 954 阅读 · 0 评论 -
SpringBoot实践(三十):了解SpringBoot的启动过程
纵览springboot启动过程会发现,其本质是创建1个IOC容器,也就是存放bean的容器,使用自动装配简化了spring的各种bean配置(xml文件),启动的所有过程都是为了构建这个bean容器服务。本来首先分析启动类上的注解,再分析SpringApplication的构建过程和run方法流程。原创 2022-08-13 15:15:59 · 546 阅读 · 0 评论 -
SpringBoot实践(二十九):oauth2+security+gateway的登录实现
前面介绍单体的security使用,微服务与单体不同在于所有服务都要过网关,若使用gateway则更要考虑异构问题(security是基于MVC的,而gateway是基于webFlux的),因此在实现上把登录/授权相关功能放在同个工程,而token校验要放在网关中(依然使用security),结合oauth2实现授权模式。假设使用security框架的登录/授权...原创 2022-08-08 17:54:40 · 1896 阅读 · 0 评论 -
SpringBoot实践(二十八):CompletedFuture异步方法测试
无原创 2022-07-30 13:26:04 · 833 阅读 · 0 评论 -
SpringBoot实践(二十七):多模块开发
微服务化后工程必然是多模块化的,在工具层面也有相关的规范和标准,如下图,先创建一个maven工程,删除src和其他无用文件在父项目上右键,选择New,再选择Module,可以创建spring工程原创 2022-07-29 18:16:20 · 750 阅读 · 0 评论 -
SpringBoot实践(二十六):Security实现Vue-Element-Admin登录拦截(适合单体应用)
之前研究时候用mock.js和模拟登录接口完成Vue-Element-Admin的登录,生产很多场景会使用SpringSecurity框架,因为它功能较多,文档写的不错,所以现在使用真实的场景实现集成,security使用系列的过滤链完成请求的过滤和自定义,直接处理的是HttpServletResponse和HttpServletRequest对象。......原创 2022-07-29 14:54:50 · 1003 阅读 · 0 评论 -
SpringBoot实践(二十五):后端响应的规范化
生产级环境前后端交互的封装需要进行标准化,包括后端响应的统一封装,方法返回体的统一封装等,这里介绍一个比较简单规范化的封装标准;原创 2022-07-29 14:21:23 · 551 阅读 · 0 评论 -
SpringBoot实践(二十四):Feign客户端使用
这里提供两种实现方式,一种是通过注解(拿来就用),另一种是自定义配置实现,通过一个工厂类提供创建方式:原创 2022-07-29 13:50:05 · 546 阅读 · 0 评论 -
Vue和Vue-Element-Admin(七):把管理系统发布阿里云(公网)
目录打包nginx配置阿里云安全组配置上一节使用Vue快速实现后台管理系统做的demo系统是是纯前端,通过mock模拟后台接口返回,打包成静态文件后,配置nginx转发,发布到阿里云上,地址:yezonggang打包npm run buildvue是单页面富应用,本次demo开发使用全局的组件引入,所以无需特殊配置直接打包问题不大,打包完成后会在项目统计目录生成dist文件夹,目录结构:把dist文件打包成zip包,放在/usr/share/nginx/后解压;..原创 2022-04-19 19:10:11 · 2934 阅读 · 0 评论 -
SpringBoot实践(二十):使用Vue快速实现后台管理系统(仅前端)
使用vue快速地开发一套后台管理系统,入门级别,对于登录和首页可以自行优化,代码地址:https://github.com/yezonggang/vue-for-backend原创 2022-04-15 18:29:44 · 2166 阅读 · 1 评论 -
SpringBoot实践(十九):使用magic-api与vue-element-admin集成开发
java后端太复杂影响开发效率,怎么用简单框架快速完成数据库信息交互,然后对外提供各种crud接口呢,这里有个magic-api可以用,可以跟上一篇的mybatis-plus对比以下,或者magic-api的自我介绍:magic-apimagic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发;原创 2022-01-21 12:58:22 · 1612 阅读 · 1 评论 -
SpringBoot实践(十八):mybatis-plus简单demo
mybatis的需要写繁杂的xml,plus可以理解是为了解决这个问题而存在的,它可以不用写xml进行持久层调用,把复杂的SQL封装成方法使用,简单的demo,后续补充复杂查询;目录pom文件aplication.properties实体类mapperservicecontrollerswagger-ui测试接口复杂查询与高级特性pom文件用到lombok,swagger,h2,mybatis-plus;<?xml version="1.0"...原创 2022-01-20 09:49:13 · 1741 阅读 · 0 评论 -
SpringBoot实践(十七):与vue-element-admin登录集成
前面博客有vue-element-admin的登录集成:登录集成,本次写个简易版,只需要前端需要的user/login、user/logout、user/info这3个接口,login实现token生成,logout直接退出登录没有操作逻辑,info是拿到login返回token后存在vuex后携带token拿当前user的权限的,把返回的roles列表读取出来,权限是对应不同的路由路径的,后端demo在git上,写的很随意需要可以参考:后端vue-element-admin环境链接教程很详..原创 2021-09-16 13:19:50 · 5276 阅读 · 3 评论 -
SpringBoot实践(十六):mark一个开源商品网站
推荐商品网站源码:JAVA商城源码_Springboot开源商城系统—Mall4jhttps://gitee.com/gz-yami/mall4jGitHub - gz-yami/mall4j: java电商商城系统特点:前后端分离,vue框架,包含小程序、APP,界面风格类似小米商城;...原创 2021-09-15 10:39:21 · 1497 阅读 · 0 评论 -
SpringBoot实践(十五):登录的token操作
前后端的REST接口交互需要维持token信息作为鉴权依据,除了首次登录/login接口拿到用户信息外,其他所有接口都需要过interceptor拦截器进行拦截鉴权,而后进行数据交互,用户信息又对应一类权限Auth,反应到前端上就是路由权限了,后端token操作逻辑可以理解分为3步:1、首次login放行,服务端生成token返回给客户端;2、其他请求携带token,服务端验证通过后返回数据;3、token有失效机制,超目录构造User用户用户验证impltoken生成器原创 2021-09-14 09:28:49 · 2882 阅读 · 0 评论 -
SpringBoot实践(十四):设置定时任务ScheduleTask
在数据处理场景中经常用到定时对数据ETL操作,springboot原生带有的ScheduleTask也可以提供丰富的定时任务操作,这里简单介绍集成使用,如果业务不复杂只是简单的定时执行任务则直接使用注解,若涉及到定时任务本身的变动(比如动态地读取库中crontab等)需要定制化地设计ScheduleTask类,按照上述描述可以分类静态定时任务和动态定时任务;目录静态ScheduleTask动态ScheduleTask模拟cron信息定时任务配置输出静态ScheduleTask原创 2021-09-13 12:23:37 · 3095 阅读 · 0 评论 -
SpringBoot实践(十三):集成swagger-ui展示接口
后端的Rest请求列表响应和描述信息在前后端协同开发时至关重要,swagger-ui能够通过配置无侵入地展示接口路径,描述,传参信息等,其集成非常简单,也有其他更优的第三方swagger-ui前端;目录pom.xml配置类application.propertiescontrollerUI效果pom.xml增加swagger和ui包依赖; <dependency> <groupId>io.springfox</groupId>原创 2021-09-13 12:01:38 · 1004 阅读 · 0 评论