![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
web框架学习
文章平均质量分 86
你家宝宝
自2018年接触到Java,至今。
展开
-
Json结构解析&比较
本次练习,主要是针对于两个Json的结构差异。多用于测试场景,比如一个很大的Json报文,需要和现有的Json报文对比,看看哪些字段没传递。亦或是新旧应用交替,使用Java应用代替其他应用,对比原先和现在的报文结构等。实现了通过javaBean的Class,解析获取一个包含所有字段的完整Json结构。实现了两个Json的比较,并记录差异节点路径;输出比较的日志。原创 2024-07-22 19:51:18 · 1025 阅读 · 0 评论 -
手写一个基于SpringBoot的MVC架构,默认实现CRUD和导入导出功能
日常开发一个项目,经常会写到CRUD和导入导出功能,很多时候都是模版式的代码结构,多次复制粘贴后就完成了。这次我打算去造一个轮子,替我去做复制粘贴的活!!目标很简单,使用SpringBoot架构去是实现一个基于Mysql数据库的自带增删改查,导入导出功能的模板代码。并且提供完备的代码生成器,一键生成你想要的代码。本项目托管在gitte上:https://gitee.com/fengsoshuai/song-tools欢迎各位点赞收藏,有好的建议也可以留言。原创 2024-06-29 16:00:17 · 1020 阅读 · 0 评论 -
自定义实现 Java17+SpringBoot3+OpenAPI+Knife4j Starter
一直以来,在接口文档这块没怎么尝试过比较新的技术点,使用的都是swagger2和 低版本的knife4j。本次就研究下在高版本的情况下,基于swagger的接口文档有什么变化。代码量不多,主要是一个自动配置类和配置字段的定义。原创 2024-05-11 16:27:59 · 883 阅读 · 2 评论 -
SpringBoot 自定义注解实现操作日志记录
关于操作日志记录,在一个项目中是必要的。本文基于 java8 和 SpringBoot 2.7 来实现此功能。之前写过一个简单的接口报文日志打印的,和本文的起始思路相同,都是使用切面。但是本文功能更为强大,也更复杂。文章见本文附录《SpringBoot自定义starter之接口日志输出》。本文代码仓库:https://gitee.com/fengsoshuai/custom-log2.git其中 org.feng.clog 是核心代码区域。org.feng.test 是用于测试功能写的。原创 2024-02-28 14:55:31 · 579 阅读 · 0 评论 -
Tomcat线程池原理(下篇:工作原理)
Tomcat 线程池,是依据 JUC 中的线程池重新自定义实现的。其执行线程的代码逻辑,和JUC 中是相同的。主要区别在于,Tomcat中对 阻塞队列进行了改造。本文主要研究 Tomcat 的线程池是如何执行线程的,即线程池的工作原理。Tomcat线程池原理(上篇:初始化原理)当前线程数小于corePoolSize,则去创建工作线程;当前线程数大于corePoolSize,但小于maximumPoolSize,则去创建工作线程;原创 2024-02-21 19:42:00 · 1567 阅读 · 0 评论 -
Tomcat线程池原理(上篇:初始化原理)
在Java Web的开发过程中,Tomcat常用的web容器。SpringBoot之前,我们用的是单独的 Tomcat,SpringBoot时代,嵌入了Tomcat。在Jdk中,JUC内有线程框架,以及可以自定义参数配置的 TreadPoolExecutor。Tomcat内也实现了自己的线程池。所谓线程池,是被用来处理传入的 HTTP 请求的。当客户端发送请求时,Tomcat 会从线程池中获取一个可用的线程来处理该请求。处理完请求后,线程将返回线程池,并在下一个请求到来时再次被重用。原创 2024-02-21 19:40:10 · 1840 阅读 · 0 评论 -
SpringMVC原理(设计原理+启动原理+工作原理)
java8创建项目,使用阿里的源:https://start.aliyun.com创建前,请先设置好自己的maven环境,java版本。保持网络正常。选择spring-web的2.7.6 版本:使用阿里的源创建好项目后,会自动生成的有控制器Controller,启动类,以及一个页面。如此,准备工作就做好了。谈起SpringMvc,最先想起来的俩注解应该是Controller和。而关于启动项目时,框架对这俩注解的处理,基本都体现在其中。原创 2024-02-07 15:06:59 · 1494 阅读 · 0 评论 -
SpringBoot3整合Mybatis-Plus,自定义动态数据源starter
本文旨在SpringBoot3整合Mybatis-Plus,实现动态数据源切换。不使用Mybatis-Plus本身的依赖。自己动手造轮子。本次使用了Java17,SpringBoot3.0.2 ,Mybatis-Spring 3版本。并且自定义starter,提供自定义注解,使用切面实现切换数据源。其中,代码分支master,是多数据源,提供静态切换方法,注解方式切换。代码分支dev,是动态多数据源,在master的基础上,提供运行时,新增或修改,或删除数据源。原创 2024-02-06 14:39:13 · 1312 阅读 · 0 评论 -
Orika MapperFacade 对象属性复制在SpringBoot项目中的使用
众所周知,在Java项目中经常会有用到各种对象属性复制的情况,以及从一个对象转换为另一个对象。MapStruct对象映射今天我们来一起看看另一种功能同样强大,性能也很高的工具!原创 2024-01-31 15:00:41 · 1346 阅读 · 0 评论 -
【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)-简化升级版
关于万能导出,前一阵子写过一个,功能是实现了的。就是在使用时,感觉如果需要导出的页面比较多,那就会出现比较多的重复代码。就想着优化+简化一下,能够更方便的使用。原版中额外增加了转换器,枚举转换等功能,但是总觉得会让整体功能变复杂,所以在这一版中就去掉了。如果有兴趣看看的话,可以切换到master分支查看。本次简化升级,本着对使用者友好的目的去实现的。另外,本文会粘贴全部代码!!在使用上的简化体现在真正导出时,只需要几行代码,就能实现功能。可以让你更加专注于业务参数的组装。而且代码比较简洁。原创 2023-12-21 18:39:30 · 1370 阅读 · 0 评论 -
Java练习-设计并实现一个字典功能模块
很多Java开发的系统中,可能都需要做一些配置呀,字典之类的设计。这里我提供一个思路,以及针对这个思路做了具体的实现,以供大家参考学习。采用java8,springboot2.7.7,mysql 进行实现。原创 2023-12-12 15:39:29 · 395 阅读 · 0 评论 -
【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)
日前,看到一个比较奇怪的导出功能。需要根据不同的页面,以及指定不同的字段列表(任意顺序),然后导出对应的表格。先假设一个场景:假如你的系统有多个列表展示页,每页中可以依据筛选条件,调整展示的列的个数,顺序等。然后要求导出的时侯,导出一摸一样的格式。也就是“所见即所得”的表格。那么基于以上场景,我们就来考虑下如何实现?本文就是对以上场景功能的一个实现。目前仅支持单sheet,不支持数据聚合等。原创 2023-11-30 11:26:47 · 2967 阅读 · 7 评论 -
【EasyExcel实践】导出多个sheet到多个excel文件,并压缩到一个zip文件
工作中遇到一个需求,一次导出多个Excel 文件,并且每个excel中可能存在1到多个sheet页。好在没有那种单元格合并的要求。总体的思路是,设计两个实体,一个表示表格,一个表示sheet 数据。并且表格包含一个list 类型的sheet对象。然后再使用等类和方法去组装表格,最终进行压缩。项目整体使用 java 8 和 阿里的easyexcel工具包。原创 2023-11-29 09:44:11 · 1594 阅读 · 15 评论 -
SpringCloud实用-OpenFeign整合okHttp
众所周知,我们在使用SpringCloud OpenFeign时,默认使用的是老旧的连接器。性能以及并发量方面都差强人意。一般而言都会对其进行优化调整。本文采用OpenFeign整合okHttp的方式替换原有的Client,去做请求。使用java 17,spring cloud 4.0.4,springboot 3.1.4使用项目是本系列第一篇中的项目本文介绍两种方式的配置,一个是LoadBalancer 的,都是默认带有连接池的。原创 2023-11-24 16:55:37 · 2605 阅读 · 0 评论 -
SpringCloud系列文章目录(总纲篇)
SpringCloud系列文章,有些文章上下文存在联系。并且,它们数量巨多,有涉及原理的,有涉及实战的。本文存在的目的是为了整理一篇大纲一样的东西,后续也会先更新大纲,随后按照大纲更新文章。原创 2023-11-24 10:33:05 · 442 阅读 · 0 评论 -
SpringCloud原理-OpenFeign篇(四、请求原理)
本篇是SpringCloud原理系列的 OpenFeign 模块的第四篇。在我们启动完应用后,Spring容器也初始化好了很多我们用到的类。(什么,你不知道,烦请先看看第三篇)那么我们下一步要做的就是,发出rest请求,然后调用FeignClient标注的接口方法。这篇文章,我们就来看看它的原理。使用java 17,spring cloud 4.0.4,springboot 3.1.4使用项目是本系列第一篇中的项目。原创 2023-11-24 09:57:22 · 337 阅读 · 0 评论 -
SpringCloud原理-OpenFeign篇(三、FeignClient的动态代理原理)
本篇是SpringCloud原理系列的 OpenFeign 模块的第三篇。主要内容是接第二篇,在将的bean描述器注册到容器中后,我们的容器在初始化时,使用了饥饿模式,直接创建Bean。本文就围绕来分析动态代码的应用,以及它本身的初始化过程。使用java 17,spring cloud 4.0.4,springboot 3.1.4这个doGetBean方法太长了,我这里不做粘贴,只挑重点的说。在这个方法中,获取Bean的时候,有调用方法。而该方法中就对做了处理。原创 2023-11-21 19:05:56 · 540 阅读 · 1 评论 -
SpringCloud原理-OpenFeign篇(二、OpenFeign包扫描和FeignClient的注册原理)
本篇是SpringCloud原理系列的 OpenFeign 模块的第二篇。主要研究是使用了FeignClient 注解的接口的初始化原理。也就是它是如何将什么类型的实例,放到容器中的。另外,本文附录中,图解了本文代码的执行链路。使用java 17,spring cloud 4.0.4,springboot 3.1.4。原创 2023-11-21 15:33:40 · 438 阅读 · 0 评论 -
SpringCloud原理-OpenFeign篇(一、Hello OpenFeign项目示例)
本篇是SpringCloud原理系列的 OpenFeign 模块的第一篇。主要内容是搭建一个极简的Spring Cloud OpenFeign 调用链路。原创 2023-11-21 14:13:57 · 232 阅读 · 0 评论 -
SpringCloud Gateway实现请求解密和响应加密
本文注重实现请求的解密和响应的加密,加解密使用的是 Hutool 中的工具类,加解密算法目前提供了AES的方式,其余方式也可兼容扩展。完整代码仓库:https://gitee.com/fengsoshuai/springcloud-gateway-feng-demo借用网关中的过滤器来实现这一功能。本文只粘贴一些重点文件内容。在聚合项目中,有两个核心模块,feng-server提供了 rest 接口,供网关使用。feng-gateway 是核心实现的网关项目,实现了自定义过滤器,以及增加了一些基本配原创 2023-10-31 18:07:04 · 3536 阅读 · 0 评论 -
MybatisPlus拦截器实战之RBAC数据权限控制
看完本文你将能学到什么?RBAC 5表模型控制数据权限Mybatis Plus 自定义拦截器拼接where条件,控制数据权限控制权限方式1,依据某一指定字段,比如创建人ID 查询数据控制权限方式2,依据RBAC模型,使用角色控制权限MybatisPlus拦截器实战之数据的加解密和脱敏新增权限注解和拦截器。特别注意的是,拦截器mybatis plus 本身提供了,但是不太满足本次功能,因此这里做了扩展,继承了原有的拦截器,重写了其中的方法。原创 2023-09-15 11:21:16 · 1132 阅读 · 0 评论 -
Mybatis-Plus 批量插入数据时报错 java.lang.Object Not Found TableInfoCache
我这里的问题主要是,调用单个插入数据,是能插入成功的。调用批量时就会报错。网上有些朋友说是因为实体定义,表名之类的问题。这个肯定不是我当前遇到的,否则单个插入数据也会报错。而且报错信息也会有所不同。在增加了继承关系的写法中,无法使用serviceImpl的一些方法。但是调用mapper的方法,是可以的。这也就是为什么我的批量操作报错,单个插入却是可以成功的原因。然后就是写这个层级结构时,可以将数据库相关的内容,全部写在 ServiceImpl 的直接子类中。其他地方再去调用。原创 2023-09-11 16:58:30 · 900 阅读 · 0 评论 -
MybatisPlus拦截器实战之数据的加解密和脱敏
看完本文你将能学到什么?Mybatis Plus 的拦截器终极奥义是使用了 Mybatis 的拦截器。只是在原先的基础上,划分的更加细致了。缺点也很明确,没有处理响应结果的钩子方法。Mybatis Plus 中的拦截器的定义是:可以看到Mybatis Plus 拦截器的处理器, 其实现了 ,在内部遍历,处理sql执行前的数据。原创 2023-08-26 17:30:08 · 1113 阅读 · 0 评论 -
Disruptor队列
前些天,心血来潮想复习一下操作系统相关的知识。然后看到了一个Java中依据硬件做出性能优化的队列。主要是内部使用了环形缓冲区(RingBuffer)存储事件,然后利用空间换时间的概念提高了CPU缓存命中,进而提高了性能和吞吐量。并且是一个有界无锁的队列。它就是 Disruptor 高性能队列,是一个号称当前最快的单机内存型队列。它的设计中体现了高性能设计思想,影响广大。今天我们就来详细看看它吧!原创 2023-07-07 11:54:17 · 289 阅读 · 0 评论 -
EasyExcel 的简单使用(读取&写入)
我们的业务场景中可能经常遇到需要保存数据到表格,或者从表格读取到数据,随后做一些操作。本文将在Spring项目中做写入和读取操作。原创 2023-06-30 16:28:02 · 5291 阅读 · 0 评论 -
SpringBoot中Redisson锁的使用(代码验证锁的流程)
前段时间自己在研究java中的锁相关的东西,从关键字到JUC中的Lock,这些锁可以在单个JVM中起到很好的作用。之前写过锁相关的文章有:深入理解Java中的synchronized深入理解Java中的Lock和AQSZookeeper 实现分布式锁(java 实现)本文就主要学习一下 Redis 在做分布式锁时,是如何使用的。原创 2023-06-29 16:52:32 · 631 阅读 · 0 评论 -
使用itextpdf填充表单域并生成pdf
最近手上有个任务,就是需要做一个pdf导出的功能。可选择的技术点比较多,我这边综合考虑之后,使用的是 itext。大致有两种实现思路:1️⃣:使用软件【Adobe Acrobat DC】去做一个pdf模版,将表单域指定好,随后使用代码去填充参数,最终得到一个pdf或字节数组。2️⃣:使用【Freemarker】渲染html页面,最终使用代码将该页面转换为pdf。我这边当前的需求比较适合第一种方式。原创 2023-06-29 09:49:43 · 3321 阅读 · 9 评论 -
Flowable工作流入门&完整SpringBoot案例
Flowable工作流是一款基于Java的轻量级开源工作流引擎,它支持BPMN2.0规范、CMMN规范,同时也提供REST API以及JavaAPI,支持Spring,Spring Boot等框架。借助Flowable工作流,企业可以快速构建出符合自己实际业务的工作流。原创 2023-06-10 14:00:05 · 9051 阅读 · 0 评论 -
Maven 下载依赖错误:Could not transfer metadata xxx Transfer failed for xxx
但是问题在于,我点击了对应的仓库,并且能使用网页打开它(包括输入对应的用户名+密码)。重启了idea多次,仍不能成功。这是一个VPN的问题。原创 2023-06-09 17:44:36 · 1606 阅读 · 0 评论 -
SpringBoot自定义starter之接口日志输出
本文灵感来源是一道面试题。要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。可能用在多个项目中。问题处理思路是,自定义一个SpringBoot的Starter,可以加入一些功能配置。核心使用自定义注解、Aspect切面来做。用切面去切你的自定义注解即可。那么下面内容就做一下具体实现。PS:本文使用的环境是 SpringBoot 的 2.7.12版本,Java openjdk11,构建工具使用了 Maven。原创 2023-06-05 17:51:25 · 1904 阅读 · 1 评论 -
Spring事务(注解 @Transactional )失效的12种场景
在某些业务场景下,如果一个请求中,需要同时写入多张表的数据或者执行多条sql。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。,就能轻松搞定事务,一直用一直爽啊!!在使用注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置参数,来完成这个功能。} }如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了等异常。而是我们自定义的异常,报错的异常不属于,所以事务也不会回滚。转载 2023-02-15 19:20:16 · 1569 阅读 · 1 评论 -
Spring事务和Transactional 注解原理(源码分析)
一般我们在SpringBoot项目中使用事务时,会用到注解。分两步操作,在 public 修饰的方法上增加注解,以及在启动类或自己的配置类上增加注解。这样就能愉快的使用注解了。本次我们主要看看Spring框架中,是如何通过代理模式以及这俩注解来实现事务的提交、回滚等操作的。原创 2023-02-14 23:10:37 · 759 阅读 · 0 评论 -
菌子导航系统(持续开发中)
本导航网站旨在对接多个三方接口,常用功能集成到导航系统中。目前已经在对接的是有道文本翻译接口、天行数据、自定义枚举生成器。最新分支是 dev 分支。主要是练习Java后端的技术。基本不涉及前端技术。原创 2023-02-11 14:37:50 · 527 阅读 · 0 评论 -
xxl-job的入门及简单使用
xxl-job 是美团点评开源出来的一个分布式任务管理平台,操作简单且容易上手。开箱即用,并且拥有对应的中文文档。名字来源自许雪里,是该项目的主要开发人员,名字首字母。本次我们主要用它来做一个定时任务的调用。下面我们来看看具体的操作步骤。我当前使用的java版本是java11,maven 3.6,mysql 8。原创 2023-02-05 12:54:46 · 611 阅读 · 0 评论 -
Nacos 注册监听器
本文主要讨论Nacos作为配置中心时,其中配置内容发生更改时,我们的应用程序能够做的事。一般使用监听器来实现这步操作。原创 2023-02-04 09:48:04 · 1929 阅读 · 0 评论 -
SpringBoot 2.7.8 自定义 Starter &自动配置
前段时间,SpringBoot 出 3.x 版本了。听说把自动配置给刀了!!置)但是这个在真正开始说要弃用,是在 2.7版本。只是向下兼容了 spring.factories 的配置方式。也就是说两种写法共存。原创 2023-02-02 11:47:03 · 1808 阅读 · 1 评论 -
Java 使用Reactive Redis
目前项目中,有使用到 Redis 的需求。场景如下:在使用消息队列时,难免会遇到重复消费的事情,因为队列本身不处理这个。那么就可以使用 Redis 来做一个避免重复消费的操作。假如你的消息队列是 rocket mq,在消息消费端,获取到的 MessageExt对象,可以拿到消息的 ID。我们在刚拿到这个ID时,就立刻对其进行存储(可以拼接你自己的业务前缀)。可以使用 redis 的 setIfAbsent ,也就是 setNx 命令。...原创 2022-08-28 15:04:26 · 624 阅读 · 0 评论 -
Java 根据数据库表生成实体类
最终的目标是,生成实体类的内容即可。我这里觉得使用swagger生成代码,放到最终的响应里,也是很不错的。使用的是Java11版本,用到的技术有lombok,swagger,springboot,spring-data,freemarker,druid。所以,这个项目的目的是,根据数据库中的某张表,生成与之对应的实体类。比如我们用的是JPA,要增加一些注解,额外还有lombok的一些注解。最近在做的项目,涉及到数据库的操作了,直接做的是直接调用接口,不用做存库操作。......原创 2022-07-24 13:36:39 · 4858 阅读 · 4 评论 -
Spring WebFlux 实践
本文借鉴于 Spring WebFlux 官方文档 ,对 Spring WebFlux进行学习、练习它的功能。涉及到 Reactive 的核心Api操作,操作数据库、Redis、Http请求等方面。本文的代码仓库:https://gitee.com/fengsoshuai/webflux-demo.........原创 2022-06-30 20:55:45 · 1590 阅读 · 0 评论 -
Spring容器&Bean生命周期常见接口
Spring的Bean的生命周期原创 2022-06-30 20:16:22 · 888 阅读 · 1 评论