- 博客(296)
- 资源 (15)
- 收藏
- 关注
原创 SpringBoot整合Log4j2进行日志记录&异步写入日志文件
最近在看一些老项目,里边记录日志的方式有 Logback 和 Log4j2 这两种。它们对于日志配置,异步策略方面都各有不同。但是 Log4j2 可以和 “最快的单体队列” Disruptor 进行整合,从而达到异步情况下,性能的极大提升。当然,这种提升是建立在内存足够的情况下。本文就 Log4j2 的使用进行整理记录。
2025-03-26 14:07:10
928
原创 自定义MDCAdapter,进行线程池级别的日志ID传递
有这样一个场景:在一个springboot项目中,使用了 logback进行日志输出。但是项目中有部分功能使用了线程池,使用MDC进行日志ID的输出。而默认的无法传递参数到线程池中。因为它本身的实现是依赖于进行数据传递的。本文就将解决这个参数传递的问题,使用阿里巴巴开源的来重新实现一个MDCAdapter。
2025-03-14 14:56:49
713
原创 SpringBoot接入DeepSeek(硅基流动版)+ 前端页面调试(WebSocket连接模式)
本文使用SpringBoot提供 WebSocket 对话功能。通过模拟对话的方式,来和DeepSeek进行交互。包含Java后端和一个简单的前端页面。
2025-03-04 19:25:09
1294
原创 SpringBoot接入DeepSeek(硅基流动版)+ 前端页面调试(SSE连接模式)
作为一个Java程序员,了解前沿科技技术,也算是份内的事了。DeepSeek 大模型,从开源到现在,一直在🔥。各个公司也基本都部署了自己的所谓满血版DeepSeek。虽然官方是免费使用的,但是它太忙了。因此,很多能直接使用的,不太忙的DeepSeek应运而生。我今天使用的就是“硅基流动版”DeepSeek!硅基流动
2025-02-26 16:31:03
1801
原创 SpringBoot自定义实现触发器模型的starter
前不久,写了个管理系统的后端,其中涉及到一个“触发器模型”的部分,可以对业务进行解耦,复用。具体内容见下边这个链接:本文的重点是,对它的一些优化,和更加规范化的调整。采用模版方法设计模式实现业务流程的组装,分为初始化(init)、执行(trigger),执行后(after)。另外这里处理的时候,选择先从spring容器中获取对应的触发器对象,然后调用的方式,也是为了后续更方便在触发器方法上增加切面、事务等操作。import com/*** 抽象触发器模板。
2025-01-23 10:57:02
903
原创 SpringCloud实用-OpenFeign 调用三方接口
一般来说我们的项目中难免会涉及到调用三方接口的场景。以前我们可能用 RestTemplate,或者再用OkHttp优化一下。但是,在读了本文之后,你将发现使用OpenFeign的 FeignClient来调用三方接口,也是纵享丝滑的。注意,本文旨在使用FeignClient调用三方接口,不讨论其他情况。比如高版本JDK自带的工具类,或者响应式API。本文使用FeignClient来调用天行API接口。在天行官网注册账号后,可以申请自己想要调用的API接口。拿到key之后即可调用。
2024-11-22 16:08:57
2020
原创 SpringBoot中扩展Druid的过滤器实现完整的SQL打印
之前通过Mybatis 、Mybatis Plus 的拦截器扩展,实现自定义的Handler,拼接了完整的SQL。本次使用 Druid 的过滤器来实现这一功能。输出一个完整的sql,并且给出执行的时间。
2024-11-01 15:12:18
853
原创 SpringBoot中的Json工具类
文章目录前言正文1、依赖引入2、JsonUtil.java3、TypeRef.java测试前言在日常开发java项目的时候,总能遇到各种关于json的业务处理。包括对象转json,json转对象,转map等情况。本文就实现一个json工具类,来处理这些业务场景。开发项目时,可以直接粘贴依赖和代码到你的项目中使用。正文1、依赖引入项目中需要先引入json对应的包。<dependency> <groupId>com.fasterxml.jackson.core<
2024-10-30 14:24:26
713
原创 写了一个SpringBoot的后端管理系统(仅后端)pine-manage-system
关于 pine-manage-system,是用于学习和使用一些java技术,和自己对某些业务的理解与落地的验证。这是一个多模块项目,里边集成了不少后端常见的功能。
2024-10-23 14:20:57
989
原创 SpringBoot项目里怎么简单高效使用Redis?我选择使用Lock4j
在平时使用SpringBoot框架时,有些业务场景会需要使用到Redis。:这是Spring Boot官方提供的Redis starter,它基于Spring Data Redis,提供了对Redis的集成支持。它默认使用Lettuce作为Redis客户端,但也支持Jedis客户端。通过这个starter,可以快速地在Spring Boot中整合、使用Redis,进行数据缓存、会话管理等操作。:这个starter提供了Spring Integration的支持,可以与Redis结合使用,实现分布式锁等功能。
2024-10-23 14:00:33
1170
原创 设计并用Java实现一个简易的规则引擎
使用规则引擎可以很方便的实现一些比较复杂的业务逻辑。本文介绍的简易版,是一个小的通用代码结构。通过组装业务数据,创建执行模版,最终执行,获取到最终结果。
2024-09-06 16:48:22
1698
原创 Json结构解析&比较
本次练习,主要是针对于两个Json的结构差异。多用于测试场景,比如一个很大的Json报文,需要和现有的Json报文对比,看看哪些字段没传递。亦或是新旧应用交替,使用Java应用代替其他应用,对比原先和现在的报文结构等。实现了通过javaBean的Class,解析获取一个包含所有字段的完整Json结构。实现了两个Json的比较,并记录差异节点路径;输出比较的日志。
2024-07-22 19:51:18
3260
原创 手写一个基于SpringBoot的MVC架构,默认实现CRUD和导入导出功能
日常开发一个项目,经常会写到CRUD和导入导出功能,很多时候都是模版式的代码结构,多次复制粘贴后就完成了。这次我打算去造一个轮子,替我去做复制粘贴的活!!目标很简单,使用SpringBoot架构去是实现一个基于Mysql数据库的自带增删改查,导入导出功能的模板代码。并且提供完备的代码生成器,一键生成你想要的代码。本项目托管在gitte上:https://gitee.com/fengsoshuai/song-tools欢迎各位点赞收藏,有好的建议也可以留言。
2024-06-29 16:00:17
1115
原创 自定义实现 Java17+SpringBoot3+OpenAPI+Knife4j Starter
一直以来,在接口文档这块没怎么尝试过比较新的技术点,使用的都是swagger2和 低版本的knife4j。本次就研究下在高版本的情况下,基于swagger的接口文档有什么变化。代码量不多,主要是一个自动配置类和配置字段的定义。
2024-05-11 16:27:59
1125
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
662
原创 Tomcat线程池原理(下篇:工作原理)
Tomcat 线程池,是依据 JUC 中的线程池重新自定义实现的。其执行线程的代码逻辑,和JUC 中是相同的。主要区别在于,Tomcat中对 阻塞队列进行了改造。本文主要研究 Tomcat 的线程池是如何执行线程的,即线程池的工作原理。Tomcat线程池原理(上篇:初始化原理)当前线程数小于corePoolSize,则去创建工作线程;当前线程数大于corePoolSize,但小于maximumPoolSize,则去创建工作线程;
2024-02-21 19:42:00
1843
原创 Tomcat线程池原理(上篇:初始化原理)
在Java Web的开发过程中,Tomcat常用的web容器。SpringBoot之前,我们用的是单独的 Tomcat,SpringBoot时代,嵌入了Tomcat。在Jdk中,JUC内有线程框架,以及可以自定义参数配置的 TreadPoolExecutor。Tomcat内也实现了自己的线程池。所谓线程池,是被用来处理传入的 HTTP 请求的。当客户端发送请求时,Tomcat 会从线程池中获取一个可用的线程来处理该请求。处理完请求后,线程将返回线程池,并在下一个请求到来时再次被重用。
2024-02-21 19:40:10
2359
原创 设计模式之委派模式
委派模式(Delegate Pattern)又叫委托模式,是一种面向对象的设计模式。它不属于23种设计模式之中,但同样也应用广泛。熟悉java类加载的人都知道,java有一个双亲委派模型。就是应用了这个委派模式的思想。(但这不是我写本文的原因!委派模式允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配任务,是一种特殊的静态处理代理,可以理解为全权代理。PS:写本文的原因在于,前几天看SpringMVC源码时遇到过。的作用就是调节,分派请求。最终使用来处理这些请求。
2024-02-19 17:14:21
1274
原创 设计模式之命令模式
命令模式(Command Pattern)是 23种设计模式之一,属于行为型设计模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式将命令的请求者和命令的处理者分开来,命令的请求者也不清楚请求的命令由哪个对象来执行,也不知道具体实现的操作是怎么样的。命令模式可以将命令组合起来形成一个复杂的宏命令,这样可以通过一个命令来实现一系列化的操作。
2024-02-19 17:13:26
1003
原创 SpringMVC原理(设计原理+启动原理+工作原理)
java8创建项目,使用阿里的源:https://start.aliyun.com创建前,请先设置好自己的maven环境,java版本。保持网络正常。选择spring-web的2.7.6 版本:使用阿里的源创建好项目后,会自动生成的有控制器Controller,启动类,以及一个页面。如此,准备工作就做好了。谈起SpringMvc,最先想起来的俩注解应该是Controller和。而关于启动项目时,框架对这俩注解的处理,基本都体现在其中。
2024-02-07 15:06:59
1569
原创 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
1542
原创 Orika MapperFacade 对象属性复制在SpringBoot项目中的使用
众所周知,在Java项目中经常会有用到各种对象属性复制的情况,以及从一个对象转换为另一个对象。MapStruct对象映射今天我们来一起看看另一种功能同样强大,性能也很高的工具!
2024-01-31 15:00:41
1718
原创 用JavaFX写了一个简易的管理系统
自学一下Java FX ,用Java代码写一个简易的客户端。本文项目是Maven项目,使用了Java17,以及mysql。代码仓库:https://gitee.com/fengsoshuai/java-fx-management-system-demo/tree/dev-with-db/启动项目后,自动展示主页面。支持分页查询,搜索,新增,修改,删除,批量删除等功能。整体分为以下几层:使用ctrl+鼠标左键选择要删除的数据。然后点击删除按钮。出现弹窗后,点击确定,即可删除。
2024-01-24 21:39:43
1639
原创 【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)-简化升级版
关于万能导出,前一阵子写过一个,功能是实现了的。就是在使用时,感觉如果需要导出的页面比较多,那就会出现比较多的重复代码。就想着优化+简化一下,能够更方便的使用。原版中额外增加了转换器,枚举转换等功能,但是总觉得会让整体功能变复杂,所以在这一版中就去掉了。如果有兴趣看看的话,可以切换到master分支查看。本次简化升级,本着对使用者友好的目的去实现的。另外,本文会粘贴全部代码!!在使用上的简化体现在真正导出时,只需要几行代码,就能实现功能。可以让你更加专注于业务参数的组装。而且代码比较简洁。
2023-12-21 18:39:30
1595
原创 Java练习-设计并实现一个字典功能模块
很多Java开发的系统中,可能都需要做一些配置呀,字典之类的设计。这里我提供一个思路,以及针对这个思路做了具体的实现,以供大家参考学习。采用java8,springboot2.7.7,mysql 进行实现。
2023-12-12 15:39:29
568
原创 【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)
日前,看到一个比较奇怪的导出功能。需要根据不同的页面,以及指定不同的字段列表(任意顺序),然后导出对应的表格。先假设一个场景:假如你的系统有多个列表展示页,每页中可以依据筛选条件,调整展示的列的个数,顺序等。然后要求导出的时侯,导出一摸一样的格式。也就是“所见即所得”的表格。那么基于以上场景,我们就来考虑下如何实现?本文就是对以上场景功能的一个实现。目前仅支持单sheet,不支持数据聚合等。
2023-11-30 11:26:47
3619
7
原创 【EasyExcel实践】导出多个sheet到多个excel文件,并压缩到一个zip文件
工作中遇到一个需求,一次导出多个Excel 文件,并且每个excel中可能存在1到多个sheet页。好在没有那种单元格合并的要求。总体的思路是,设计两个实体,一个表示表格,一个表示sheet 数据。并且表格包含一个list 类型的sheet对象。然后再使用等类和方法去组装表格,最终进行压缩。项目整体使用 java 8 和 阿里的easyexcel工具包。
2023-11-29 09:44:11
2188
17
原创 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
4419
原创 SpringCloud系列文章目录(总纲篇)
SpringCloud系列文章,有些文章上下文存在联系。并且,它们数量巨多,有涉及原理的,有涉及实战的。本文存在的目的是为了整理一篇大纲一样的东西,后续也会先更新大纲,随后按照大纲更新文章。
2023-11-24 10:33:05
911
原创 SpringCloud原理-OpenFeign篇(四、请求原理)
本篇是SpringCloud原理系列的 OpenFeign 模块的第四篇。在我们启动完应用后,Spring容器也初始化好了很多我们用到的类。(什么,你不知道,烦请先看看第三篇)那么我们下一步要做的就是,发出rest请求,然后调用FeignClient标注的接口方法。这篇文章,我们就来看看它的原理。使用java 17,spring cloud 4.0.4,springboot 3.1.4使用项目是本系列第一篇中的项目。
2023-11-24 09:57:22
399
原创 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
747
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
515
原创 SpringCloud原理-OpenFeign篇(一、Hello OpenFeign项目示例)
本篇是SpringCloud原理系列的 OpenFeign 模块的第一篇。主要内容是搭建一个极简的Spring Cloud OpenFeign 调用链路。
2023-11-21 14:13:57
298
原创 SpringCloud Gateway实现请求解密和响应加密
本文注重实现请求的解密和响应的加密,加解密使用的是 Hutool 中的工具类,加解密算法目前提供了AES的方式,其余方式也可兼容扩展。完整代码仓库:https://gitee.com/fengsoshuai/springcloud-gateway-feng-demo借用网关中的过滤器来实现这一功能。本文只粘贴一些重点文件内容。在聚合项目中,有两个核心模块,feng-server提供了 rest 接口,供网关使用。feng-gateway 是核心实现的网关项目,实现了自定义过滤器,以及增加了一些基本配
2023-10-31 18:07:04
4368
3
原创 一致性哈希算法原理
首先我们学习和了解一个知识时,可能会先下意识搜索一下它的基本概念。所以我先百度了一下。百度给出的概念,可以说是很明确了:一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题。
2023-10-26 10:19:39
216
原创 Java21来了,赶紧用起来(附代码使用示例)
Java21 自发布日起,将会长期支持 8 年。(长期维护更新,修复bug)相当于当年的 java8 ,预计会很受 java 程序员的喜欢。
2023-09-27 16:36:44
3317
原创 MybatisPlus拦截器实战之RBAC数据权限控制
看完本文你将能学到什么?RBAC 5表模型控制数据权限Mybatis Plus 自定义拦截器拼接where条件,控制数据权限控制权限方式1,依据某一指定字段,比如创建人ID 查询数据控制权限方式2,依据RBAC模型,使用角色控制权限MybatisPlus拦截器实战之数据的加解密和脱敏新增权限注解和拦截器。特别注意的是,拦截器mybatis plus 本身提供了,但是不太满足本次功能,因此这里做了扩展,继承了原有的拦截器,重写了其中的方法。
2023-09-15 11:21:16
1427
原创 Mybatis-Plus 批量插入数据时报错 java.lang.Object Not Found TableInfoCache
我这里的问题主要是,调用单个插入数据,是能插入成功的。调用批量时就会报错。网上有些朋友说是因为实体定义,表名之类的问题。这个肯定不是我当前遇到的,否则单个插入数据也会报错。而且报错信息也会有所不同。在增加了继承关系的写法中,无法使用serviceImpl的一些方法。但是调用mapper的方法,是可以的。这也就是为什么我的批量操作报错,单个插入却是可以成功的原因。然后就是写这个层级结构时,可以将数据库相关的内容,全部写在 ServiceImpl 的直接子类中。其他地方再去调用。
2023-09-11 16:58:30
1207
原创 MybatisPlus拦截器实战之数据的加解密和脱敏
看完本文你将能学到什么?Mybatis Plus 的拦截器终极奥义是使用了 Mybatis 的拦截器。只是在原先的基础上,划分的更加细致了。缺点也很明确,没有处理响应结果的钩子方法。Mybatis Plus 中的拦截器的定义是:可以看到Mybatis Plus 拦截器的处理器, 其实现了 ,在内部遍历,处理sql执行前的数据。
2023-08-26 17:30:08
1356
微服务设计与开发技术的ppt详细讲解,涉及到微服务演变,以及各种架构的介绍
2023-02-05
JAVA核心面试知识整理.pdf
2020-05-07
powerdesinger的基本使用.pdf
2020-05-06
dubbo-demo.zip
2020-03-20
大数据分析淘宝双11的SSM项目.rar
2020-02-27
大数据分析双11的markdown文档.rar
2020-02-27
ssh-idea-maven-create.docx
2019-10-17
hibernate_demo.rar
2019-10-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人