- 博客(45)
- 收藏
- 关注
原创 InheritableThreadLocal遇到线程池出现的问题分析及解决方案
在开发xxl-job定时任务时,由于在定时任务中使用了线程池进行子任务处理并且打印日志,发现存在子任务日志打印位置错乱问题,比如,定时任务1中线程池执行的子任务日志被记录到了定时任务2的日志文件中。
2024-07-18 10:38:19
969
原创 [Netty实践] 请求响应同步实现
本片文章将实现请求响应同步,什么是请求响应同步呢?就是当我们发起一个请求时,希望能够在一定时间内同步(线程阻塞)等待响应结果。我们通过netty实现rpc调用时,由于客户端和服务端保持连接,在此期间客户端会有无数的接口调用(并发),而此时,每次发送的请求需要能够及时响应获取调用结果,服务端一次次返回调用结果,客户端在处理响应结果时,需要与请求建立联系,确保每一次的请求能够正确获取到对应的调用结果。
2024-03-22 08:53:00
2186
原创 [Netty实践] 简单聊天实现(四):Server集群改造
本章是拓展内容,主要实现的是Server集群。当系统的用户多了之后,单机Server资源有限,无法提供socket连接时,我们需要部署Server集群,当Server支持集群之后,将存在以下问题:每个用户连接的是不同的Server,比如,zhangsan用户连接的是ServerA,lisi用户连接的是ServerB,当zhangsan用户向lisi用户发送消息时,由于两个用户客户端与服务端通信的Channel处于不同的服务端,该如何确保能够正常通信呢?
2024-03-21 17:13:40
981
原创 网关层针对各微服务动态修改Ribbon路由策略
最近,遇到这么一个需求:1、需要在网关层(目前使用zuul)为某一个服务指定自定义算法IP Hash路由策略2、除第一次改造重启后,后续为微服务添加路由算法时,zuul网关不能重启,因为会导致用户短时间内不会使用,也就是说,需要动态的为服务修改路由算法基于上诉两点,本人查找过不少资料,发现没有找到符合的解决方案,也可能是关键词条不准确的问题,导致很长一段时间陷入泥潭,后来通过编程式选择服务进行远程调用上,找到了修改的思路。
2024-03-21 17:04:51
1334
原创 [Netty实践] 简单聊天实现(二):server部分
本章节主要讲第二部分,涉及服务端的实现,主要包括服务端的创建、channel管理、组管理、对应各种Handler实现。
2023-12-27 08:50:37
897
原创 [Netty实践] 简单聊天实现(一):基础部分
本章主要通过netty实现一个简单的聊天功能,主要分为三块:登录、单聊以及群聊功能,上诉功能会做的比较粗略,主打的就是一个学习,更完善的功能需要自行深入了解以及修改,也希望通过这个章节实践,能够给大家帮助。该章节主要分为三部分,同时也是分为三篇博客:第一部分,主要涉及服务端与客户端之间通信的消息设计,以及消息序列化相关实现第二部分,主要涉及服务端的实现,主要包括服务端的创建、channel管理、组管理、对应各种Handler实现。
2023-12-27 08:48:35
1023
原创 [Netty实践] 简单WebSocket服务实现
关于WebSocket此处不进行过多介绍,本章主要着重通过Netty实现WebSocket通信服务端,并且实现一个简单的通过网页进行聊天的功能。讲到WebSocket,这里简单介绍一下为什么要使用WebSocket。以往我们通过网页与服务器进行交互时,都是通过发起一个http/https请求,该请求是无状态的,发送请求后,等待获取服务器返回的结果之后,这次请求就结束了,客户端与服务端就断开了。
2023-12-24 16:53:44
1267
原创 [Netty实践] 心跳检测
心跳检测是用于保障服务端与客户端之间通信连接状态的实时监控。客户端不断向服务端发送心跳包(心跳包就是一组数据,自行定义,能够进行区分就好)。服务端在一定时间范围内能够正常接收客户端心跳包的话,就认为连接正常活跃;如果服务端在一定时间内没有接收到客户端心跳包的话,就认为连接出现中断或异常,那么就可以进行连接断开、释放资源等操作,从而保证节省服务端连接资源。
2023-12-24 16:47:30
2513
原创 JavaFx基础学习【五】:FXML布局文件使用
FXML是一种在JavaFX应用程序中定义用户界面的,基于XML的声明性标记语言。FXML非常适用来静态布局,如表单、控件和表格。如果你还不是不明白FXML到底是什么,你可以类比HTML,我们可以通过HTML来做web页面的UI,同理,我们就可以使用FXML来做JavaFx应用程序的UI。1、fx:id,用于指定标签的id,通过该id,我们便能够找到该标签我是一个按钮
2023-08-14 20:45:11
1730
原创 JavaFx基础学习【四】:UI控件的通用属性
Node,就是节点,在整体结构中,就是黄色那一块,红色也算个人理解,在实际中,Node可以说是我们的UI页面上的每一个节点了,比如按钮、标签之类的控件,而这些控件,大多都是有一些通用属性的,以下简单介绍一下。
2023-08-14 20:43:29
1370
原创 JavaFx基础学习【三】:Scene
Scene,就是场景,在整体结构中,就是蓝色那一块的为了更好的体验出什么是Scene,以下提供了两个不同背景颜色的Scene,让大家知道是在Application中是处于哪一块,从图中我们可以很容易看出来,圈出来的内容,我们Scene就是指这一大块区域的内容,在以后开发中,我们的每个Scene可以有不同的大小、背景颜色、Node元素之类的,好比我们每个网页都有不同标签及样式: 以下我们将创建两个Scene,第一个Sence有一个按钮可以进入到第二个人Scene,第二个Scene有一个按钮可以返回到第一个Sc
2023-08-14 20:39:47
854
原创 JavaFx基础学习【二】:Stage
窗口Stage为图中标绿部分:实际为如下部分:不同的操作系统表现的样式不同,以下都是以Windows操作系统为例,为了使大家更清楚Stage是那部分,直接看以下图,可能更清楚:有点潦草,但意思就是窗口框体。
2023-08-14 20:28:19
1899
原创 JavaFx基础学习【一】:基本认识
JavaFX 是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。它是许多个人和公司的共同努力的成果,目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。
2023-08-14 19:55:36
1362
原创 Java之Graphics2D图片生成水印
百度百科:Graphics2D ,Graphics 类,提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制不止通过JDK提供的工具类,还可以使用第三方的Thumbnailator工具,进行添加水印、制作缩略图等功能。
2023-06-25 10:40:53
811
原创 [Spring Boot Starter系列]Spring Boot自动装配原理
什么是Spring Boot的自动装配?Spring Boot自动配置尝试根据您添加的jar依赖项自动配置您的Spring应用程序。您需要通过将@EnableAutoConfiguration或@SpringBootApplication注释添加到您的一个@Configuration类中来选择自动配置。您应该只添加一个@SpringBootApplication或@EnableAutoConfiguration注释。
2023-06-18 21:00:09
284
原创 [Spring Boot Starter系列]spring-boot-starter组件自定义开发及应用
为什么自定义spring-boot-starter组件?我们以该问题作为切入点进行分析。当然,每个人有自己不同的理解,这里仅结合我所接触的业务进行分享:1、使用自定义starter组件之前:在我们还没有使用自定义stater组件之前,通常,我们会将一些通用的功能封装在一个项目模块之中(避免每个项目写重复代码,可封装如数据源切换、安全校验之类的代码),再打包成jar包,发布到maven私仓中,供其他项目引入使用。
2023-06-11 17:27:12
963
原创 Mybatis之Collectin标签多层嵌套使用
关于该篇文章,主要是通过例子展示,当编写mybatis的xml文件中,出现需要使用嵌套Collection标签时候的有效写法,以此分享给大家,同时也是作为自己在业务开发中问题解决的记录。
2023-06-05 16:48:01
1649
原创 线程池执行FutureTask,得到返回结果
一种可取消的异步计算。这个类提供了Future的基本实现,提供了启动和取消计算、查询计算是否完成以及检索计算结果的方法。只有在计算完成后才能检索结果;如果计算尚未完成,则get方法将被阻塞。一旦计算完成,就无法重新启动或取消计算(除非使用runAndReset调用计算)。FutureTask可以用于包装Callable或Runnable对象。因为FutureTask实现了Runnable,所以FutureTasks可以提交给Executor执行。
2023-04-11 14:42:01
1341
1
原创 Spring根据业务选择不同的策略Bean执行
在执行业务的时候,对于不同情况将有不同的算法逻辑进行运算。比如,从前端或表记录中传递了一个字段mode,当mode为1时,执行策略1,;当mode为2时,执行策略2。对于以上算法的选择,以下有两种处理方式:...
2023-04-10 13:47:41
469
原创 Spring Boot配置docker-maven-plugin实现构建与推送镜像
在Spring Boot项目中引入docker-maven-plugin进行相关配置,之后就可以在项目根目录下执行mvn clean package docker:build -DpushImage,就可以在服务器上的docker生成镜像,并且推送到远程仓库上,十分方便,不用每次都登录服务器进行操作。在父工程pom.xml配置如下,如果你不愿意将插件在父工程的pom.xml中进行管理与配置,那么就将以下配置去掉pluginManagemt标签,然后放在子工程中的pom.xml中即可。
2023-03-18 09:29:18
3420
原创 Java从sftp服务器上传与下载文件
摘自百度百科:SSH文件传输协议,是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。SFTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。
2023-03-12 15:29:17
8267
2
原创 前后端分离架构文件上传与下载(含Vue + Spring完整代码)
本文采用前后端分离式的架构,其中涉及到文件下载的需求,文件下载在任何系统中都是比较常见的。对于前后端分离架构的文件下载与往常的写法有些许不同(试过直接使用a标签,href填上下载地址,发现行不通),所以经过查找与尝试,以下文件下载前后端实现流程供大家参考。
2023-03-06 08:00:00
5206
3
原创 Spring Boot读取resource目录下文件失败解决方案及分析
最近有个需求,就是需要从resource目录下读取文件返回给用户。在idea中运行时,有些resource下文件读取工具类能够正常获取读取到文件。但是通过java –jar的方式去运行jar包,此时resource下文件读取工具类读取文件就失效了。通过查询搜索,了解到了是读取的方式导致文件读取失败。
2023-03-06 08:00:00
9015
3
原创 Spring Boot动态api执行python脚本
现状:1、每次客户有需求,我们都需要在系统中新增接口,然后再将系统重新进行发布。2、系统中存在很多的基本接口,大部分数据都能通过这些基本接口进行调用拼接。因此,基于以上两点现状,领导提出以下要求:1、系统能够动态新增接口,接口返回数据可以由系统已有基本接口进行调用拼接处理,而且系统不能够重新发布。2、调用基本接口及拼接数据的流程在python脚本中完成,也就是一个接口对应一个脚本文件,能够将python脚本文件执行的结果返回给用户。(至于使用python脚本的原因主要是考虑外部团队使用python居多,既然
2023-03-06 08:00:00
2142
原创 Java从ftp服务器上传与下载文件
业务需要从ftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作ftp的基本功能,有需求的小伙伴可以看看具体的实现过程。摘自百度百科:文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。第一次进行文件上传或下载是正常的,当第二次进行文件上传或下载时,从FtpClient获取的输入流或输出流是空的。
2023-03-06 08:00:00
8499
2
原创 SpringBoot配置信息加密(jasypt)
在我们配置文件中,经常有一些敏感的数据,比如数据源的用户名、密码、连接地址等,如果一旦这些数据泄露,那么将导致我们的数据源暴露,为了避免这一种情况发生,可以将这些敏感信息进行加密处理。以上简单讲述配置文件的基本加密使用过程,还有更多有关jasypt的高级用法,请查看官方文档。
2023-02-24 09:33:04
766
原创 SpringBoot接口返回数据脱敏(Mybatis、Jackson)
J数据脱敏有以下几种做法:1、通过自定义Jackson注解,实现在属性序列化过程中处理数据2、通过Mybatis查询数据时处理3、其他方式Jackson是Spring默认的序列化框架,以下将通过自定义Jackson注解,实现在序列化过程中对属性值进行处理。对于数据库数据的加密解密将采用Mybatis的TypeHandler处理,在我们为数据库提供数据后,会根据我们的需求,对部分数据进行加密。在读取后数据最终到我们手上前,会对读取到数据进行解密。
2023-02-24 09:11:22
2603
4
原创 Spring实现HTTPS双向认证
本篇博客讲的主要是双向认证,通过一些简单案例来展示双向认证的配置过程。有关单向认证和一些https配置,可以看看我的这篇博客,只有了解清楚单向认证之后,那么双向认证理解更加简单,因为双向认证基于单向认证配置,所以建议在做https双向认证之前,先把https单向认证搞清楚
2022-11-25 10:34:28
1794
2
原创 Spring实现HTTPS方式访问服务(单向认证)
本文通过Spring来配置https服务,后续会将相关的知识内容简单讲解一下,该文章主要是https单向认证,双向认证实现过程将在后续不久的另外一边文章涉及,感兴趣的小伙伴可以提前提供关注一下。
2022-11-24 10:28:30
3841
5
原创 Java多线程执行单个大任务
最近对一个接口执行进行优化,先简单说说接口的详情以及优化的方向吧。本文所提供的解决方法并不是一个好方案,但是本文的目的是在解决问题的同时,加深对线程池的了解与使用。该接口的主要工作内容是生成业务相关的图表(根据用户选择,可以生成1-n张图表),用户提交生成任务之后,便生成一个任务记录,初始状态为创建,用户将等待任务处理。任务状态有以下几种:创建、运行、失败、空数据、成功等,任务状态的变化将由任务执行情况而定。在用户提交生成任务之后,会将生成图表的任务提交到线程池中去执行。
2022-11-04 15:16:30
1862
原创 由一道面试题引发对LockSupport的使用思考,看看你中招没有
1、在使用LockSupport,最好确保对同一个线程进行阻塞和唤醒时,park和unpark总是成对出现的。因为在异步线程中,如果不能确保线程执行顺序,多个park和unpark会导致线程状态混乱,它可能因为不成对的park和unpark而导致它可能处于阻塞或唤醒。2、在对线程进行唤醒时,请确保线程是可用的(这是本文章主旨)。
2022-11-02 14:43:22
109
原创 Java Web简化版本大文件分片上传(含前端+后端)
本着能调参数就不改代码的原则,尝试通过调整JVM来实现大文件上传,最后发现不可行,因为虽然上传的是2G文件,但是实际占用的内存却远远大于2G。于是,我按照自己的想法,写了一个简单版本的文件分片上传,简单主要是简单在后台处理上面进行了各种简化,使得文件分片上传更加简单明了。前端的文件分片上传组件,我这里使用的是WebUploader,使用成熟组件的好处是:不用自己写文件切割的相关逻辑,所有分片文件请求发送完毕之后,会触发一个最终确认的请求。迫于无奈,只能对文件上传接口进行改造,使用较为通用的文件分片上传。
2022-11-02 14:42:56
1194
原创 Sharding-JDBC简单实现水平分库初体验
sharding-jdbc是轻量级的java框架,是增强版的JDBC驱动sharding-jdbc并不是做分库分表,是操作多个库多个表sharding-jdbc主要两个功能:数据分片和读写分离sharding-jdbc目的是:简化对分库分表之后的数据相关操作参考文档:ShardingSphere-JDBC :: ShardingSpherehttps://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc
2022-06-12 16:33:48
524
原创 Sharding-JDBC简单实现水平分表初体验
sharding-jdbc是轻量级的java框架,是增强版的JDBC驱动sharding-jdbc并不是做分库分表,是操作多个库多个表sharding-jdbc主要两个功能:数据分片和读写分离sharding-jdbc目的是:简化对分库分表之后的数据相关操作参考文档:数据源配置 :: ShardingSpherehttps://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/yaml-config/d
2022-06-12 16:32:57
395
原创 分库分表基本了解
1、首先理解概念,什么时分库分表?分表:将单表拆分成多张表,数据分散到不同表中。分库:将单库拆分成多个库,数据分散到不同库中。2、其次,为什么要分库分表?分库分表的主要目的是提升数据查询的效率、减轻数据库的压力等。可以通过缓存、读写分离、索引等方式提升数据查询效率,通过增加硬件资源,比如内存、CPU等减轻数据库的压力。但是日益剧增的数据,使以上的方式都不足以奏效时,分库分表便是一种解决方案,虽然该方案在使用的过程中会遇到不少难题,但好在有开源技术能够帮我们解决大部分难题。分库分表主要分为以下四种方式:垂直分
2022-06-11 11:10:42
452
原创 Nacos作为配置中心的简单使用
一、什么是nacos,为什么选择使用nacosnacos是alibaba开源的一款具有分布式服务注册与发现、配置等功能的组件,熟悉分布式spring cloud的小伙伴一定对eureka、config不陌生。在没有nacos的时候,我们可能选择的组件eureka作为服务注册中心,总体使用感觉一般般。其次就是如果要对服务进行配置的话,还得引入config,这只是对单机下服务进行配置与刷新,如果要对集群服务进行配置刷新的话,还得额外引入bus、mq等相关组件,整体变得更加复杂。而在这里我们只是用nacos,
2022-05-08 16:06:12
7441
原创 Nacos注册中心简单使用(含nacos搭建集群流程)
一、什么是nacos,为什么选择使用nacosnacos是alibaba开源的一款具有分布式服务注册与发现、配置等功能的组件,熟悉分布式spring cloud的小伙伴一定对eureka、config不陌生。在没有nacos的时候,我们可能选择的组件eureka作为服务注册中心,总体使用感觉一般般。其次就是如果要对服务进行配置的话,还得引入config,这只是对单机下服务进行配置与刷新,如果要对集群服务进行配置刷新的话,还得额外引入bus、mq等相关组件,整体变得更加复杂。而在这里我们只是用nacos,
2022-05-07 17:08:16
3395
原创 RestTemplate远程调用,响应结果中的响应头为content-type:text/plain;charset=utf-8,且数据类型转换失败
一、问题出现在使用RestTemplate发动远程调用某个api时,控制台打印了错误日志,说的是数据转换为对象失败,刚开始以为只是提供的类型不符合,后来依次试过list、map、JSONObject都是报一样的错误。报错信息类似如下:Could not extract response: no suitable HttpMessageConverter found for response type [interface java.util.List] and content type [text
2022-05-06 09:00:00
12327
原创 RestTemplate处理HTTP状态码为400、500等错误码时,如何获取到其响应结果内容
一、问题的出现最近在使用RestTemplate发送HTTP请求时,服务端发送回来的响应结果中,HTTP响应码为400、500之类的,RestTemplate默认不处理这类响应结果,直接抛异常。但是,该请求的响应结果内容却是我需要用到的,因为我需要通过该请求的响应结果内容,告诉用户远程调用接口时,出现错误时问题是什么,以及通过请求返回的自定义结果集,来进行其他操作。现在我们开发中,不管用户执行该请求是否成功,返回的HTTP状态码都是200,但是会在返回的自定义结果集中的code、message去体现
2022-05-05 09:00:00
11736
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人