自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (2)
  • 收藏
  • 关注

原创 如何基于Spring Boot项目从零开始打造一个基于数据库号段模式去中心化的分布式ID生成方案

在当前系统开发过程中,单体架构的应用正在走向消亡,越来越多的应用开始分布式架构,在分布式架构设计过程中,有一个问题往往避免不了,就是分布式ID生成问题。在常见解决方案中,有使用雪花算法或者自建统一ID生成服务雪花算法是一个很好的分布式ID生成方案,不过雪花算法的递增规律可能看起来不太明显,自建统一ID生成服务面对中小型系统来说又太过于复杂了,那除了这些方法之外还有什么好的解决方法没有呢?这次我们介绍一个解决方案,基于数据库号段的解决方案。

2024-04-27 10:34:59 722 1

原创 Java应用开发必备:使用 easy-captcha 组件生成验证码的详细介绍

最近系统开发在优化验证码的相关功能,第一反应就是有没有开源的第三方组件可以使用呢。在一番寻觅以后,还真发现一个好用的第三方验证码组件。是一个开源的Java库,用于生成和验证验证码,它的API上手难度低,可以生成包含数字字母中文和数字运算验证码,还有会动的GIF格式验证码哦,此外还允许开发者针对长度字符集字体颜色样式等方面进行自定义,可以满足大部分复杂场景。// 指定宽度为200,高度为100,验证码字符为5个。

2024-04-27 10:33:44 969 1

原创 Java开发Tips:避免浮点数类型比较时陷入的坑

可以看到,虽然Java中浮点数比较只是一个小功能,但是使用不当还是有很大的业务风险,大家平时开发过程中,针对业务功能还是需要做好充分测试。

2024-04-27 10:33:07 946

原创 记一次中间件宕机以后持续请求导致应用OOM的排查思路(server.max-http-header-size属性配置不当的严重后果)

最近有一次在系统并发比较高的时候,数据库突然发生了故障,导致大量请求失败,在数据库宕机不久,通过应用日志可以看到系统发生了。通过内部排查得知,原来是应用提供的某个接口是GET请求方式,在请求URL中拼接的参数过大的时候会报。初次看到这个现象的时候,我还是有点懵逼的,数据库宕机以后为什么会导致应用发生OOM呢?还在继续接受请求,由于请求响应阻塞,同时此时会有大量请求进行堆积,但是每次请求都会创建。最后,将该GET请求方式接口修改成了POST方式请求,参数传递也通过请求体进行,

2024-04-19 19:46:47 1115

原创 什么?我一行日志代码竟然让接口响应延迟了1s

代码逻辑很简单,参数type如果是old,日志级别是debug的话,需要打印一下debug日志,debug日志中需要调用一个方法。在某次开发过程中,对于一个接口,我只是加了一行代码竟然让接口响应延迟大大增加,感觉是很小一个错误,在此记录一下。可以看到此时响应时间增长到1000多毫秒了,两者只是一行日志的区别。了,通过应用日志也可以发现test()方法不再执行。可以看到此时响应时间在几十毫秒的样子。可以看到此时,方法耗时。

2024-04-19 19:42:49 215

原创 Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?

不知道大家注意过没有,在Spring Boot项目启动过程中日志打印并没有显示完整的报名,而是显示一些o.a.co.s.web形式的包名,如下图:这是为什么呢?

2024-03-27 18:48:22 580

原创 Spring Boot项目怎么从Nacos注册中心上获取其他服务列表信息?

在spring boot项目开发过程中,为了进行微服务之间的调用,我们一般会使用注册中心,比如Nacos。假设我们有一个业务需求,应用A需要从Nacos注册中心上获取服务信息进行分析,需要怎么实现呢?

2024-03-14 20:15:19 1036 1

原创 Spring Boot项目如何快速从零开始打造一个属于自己的RPC框架

在平时Spring Boot项目开发过程中,我们进行远程服务调用大都采用 + 相关注解发布接口,使用组件进行微服务之间调用。这套技术架构已经足够完善了,当然没有什么问题,但是作为一个开发者,老是用一套框架天天写代码,不免有点无聊,那么今天我们就从零开始,不使用 + 相关注解发布接口,不使用组件进行远程调用,靠自己,快速从零开始实现一个属于,炫一下吧!2. 自定义注解既然我们不使用Spring提供的原生相关注解了,那我们为了简化开发,还是吧。此注解的作用于接口上,被该注解标识的接口可以被自定义框架,简化我

2024-02-27 21:40:33 1587 6

原创 Spring Boot项目中不使用@RequestMapping相关注解,如何动态发布自定义URL路径

在Spring Boot项目开发过程中,对于接口API发布URL访问路径,一般都是在类上标识或者注解,然后在方法上标识注解,通过设置注解属性,发布URL。在某些场景下,我觉得这样发布URL太麻烦了,不适用,有没有什么其他方法自由发布定义的接口呢?答案是肯定的。参考步骤二的测试截图效果,我们自定义发布一个URL。/*** 注册一个web容器初始化以后的事件监听,注册自定义URL/*** 标识事件监听器是否已经注册,避免重复注册/*** 需要发布的地址。

2024-02-27 07:00:00 2455 1

原创 Spring Boo项目中方法参数对象中字段上存在的自定义注解如何进行拦截解析

在Spring Boot项目开发过程中,我们经常会使用到自定义注解的方式进行业务逻辑开发,此时注解我们一般是放在方法或者类上面,通过AOP切面拦截的方式进行自定义业务逻辑填充。但是如果自定义注解放在类的字段上,此时应该如何进行解析呢?@Target({

2024-02-25 21:25:07 1397

原创 注意!你在Java程序中使用取模(%)算法进行数字奇偶判断的代码可能有BUG!

我们在平时代码开发过程中,可能会遇到对数字进行奇数、偶数判断,初级开发者往往会使用进行取模的方式,一般来说也不会有什么问题,但是可能存在隐藏bug。测试代码:@TestSystem.out.println("2是:" + doRemainder(2));System.out.println("1是:" + doRemainder(1));System.out.println("0是:" + doRemainder(0));

2024-02-25 21:21:03 375

原创 Spring框架@Autowired注解进行字段时,使用父类类型接收子类变量,可以注入成功吗?(@Autowired源码跟踪)

平常我们在使用spring框架开发项目过程中,会使用@Autowired注解进行属性依赖注入,一般我们都是声明接口类型来接收接口实现变量,那么使用父类类型接收子类变量,可以注入成功吗?答案是肯定可以的!以上流程还是比较清晰的,分析过程中有一些分支流程没有过度关注,有兴趣的小伙伴也可以参考流程,自己进行debug调试分析。

2024-02-22 21:40:15 917 1

原创 Spring Boot应用集成Actuator组件以后怎么自定义端点暴露信息

在平时业务开发中,我们往往会在spring Boot项目中集成Actuator组件进行系统监控,虽然Actuator组件暴露的端点信息已经足够丰富了,但是特殊场景下,我们也需要自己暴露端点信息,此时应该怎么操作呢?@RestControllerEndpoint(id = "myActuator") // 标识这是一个actuator组件暴露端点@Component //交给Spring容器管理resultMap.put("msg", "我是测试数据...");

2024-02-20 21:29:50 611

原创 Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设置的属性进行读取加解密,这个在开发过程中应该怎么实现呢?在resource目录下新建META-INF目录,新建spring.factories文件在resource目录下新建META-INF目录,新建spring.factories文件。

2024-02-20 21:25:58 929

原创 Spring Boot项目中TaskDecorator的应用实践

TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。System . out . println("线程执行前,资源设置。。。。");System . out . println("线程执行后,资源清理。。。。");} }System . out . println("线程执行前,资源设置。。。。");System . out . println("线程执行后,资源清理。。。。");} }

2024-02-20 21:24:39 854

原创 Spring Boot应用集成Actuator端点自定义Filter解决未授权访问的漏洞

我们知道想要实时监控我们的应用程序的运行状态,比如实时显示一些指标数据,观察每时每刻访问的流量,或者是我们数据库的访问状态等等,需要使用到Actuator组件,但是Actuator有一个访问未授权问题,简单说就是其他人可以通过Actuator组件暴露的URL进行端点信息访问,甚至shutdown应用。那么我们有没有什么解决方法呢?endpoints:web:exposure:whiteUrl: # 白名单,配置白名单的URL请求时不需要验证,多个可以用英文逗号分隔。

2024-02-19 22:51:50 1509

原创 Java 21 新特性的扫盲级别初体验

JDK 21 于 2023 年 9 月发布,作为目前讨论热度最高的JDK,虽然大家都开玩笑说你发任你发,我用Java8,但是作为一个Javaer,对JDK21的新特性还是要有所了解的。虚拟线程序列集合记录模式字符串模板(预览)未命名模式和变量(预览)未命名类和实例主要方法(预览)作用域值(预览)结构化并发(预览)JDK官网安装过程在这里就不赘述了,正常【下一步】就行了。

2024-02-19 22:48:13 2890 1

原创 关于Spring Boot应用系统避免因为日切(日期切换)导致请求结果变更的一种解决方案

在系统开发过程中,有些业务功能面临日切(日期切换)问题,比如结息跑批问题,在当前工作日临近24点的时候触发结息,实际交易时间我们预期的是当前时间,但是由于业务执行耗时,可能进行了日切,业务跑到下一个工作日了,这样业务如果采用下一个工作日的时间进行业务计算,可能会导致业务结果与预期不一致,有没有什么解决方案呢?本文只是提供一种业务日切处理的大概思路,实际开发过程中,请以业务逻辑为根本,完善日切面临的问题解决方案,避免无脑照搬导致的业务异常。

2024-02-18 22:47:57 867

原创 Spring Boot项目内置Tomcat容器如何配置使用https协议访问(data isn‘t an object ID (tag = 48)问题解决方案)

将上面生成的pkcs12类型证书文件拷贝到Spring Boot项目的。,不过Spring Boot项目不能直接使用crt证书,https生成私钥和crt证书文件,可以参考之前的博客。此时需要升级JDK版本,resource目录。

2024-02-08 09:15:00 529 1

原创 seata安装部署手册

数据库脚本位置:seata/script/server/db。高可用配置,增加配置seata实例数即可。打开conf配置文件目录,打开。

2024-02-08 06:00:00 793

原创 nacos安装手册

在nacos的解压目录nacos的/config目录下,有配置文件cluster.conf,请每行配置成ip:port。(需要每个节点都配置。初始化MySQL数据库,sql可以在nacos config目录下面获取。修改application.properties配置。登录任意一个节点 账号: nacos / nacos。默认账号: nacos / nacos。集群搭建以3个节点为例进行步骤说明。依次在服务节点关闭nacos服务。依次在服务节点启动nacos服务。

2024-02-07 19:30:00 969

原创 使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密)

在业务系统开发过程中,我们必不可少的会使用数据库,在应用开发过程中,数据库连接信息往往都是以明文的方式配置到yaml配置文件中的,这样有密码泄露的风险,那么有没有什么方式可以避免呢?方案当然是有的,就是对数据库密码配置的时候进行加密,然后读取的时候再进行解密,这样就可以避免敏感信息泄露了。针对加密的数据库配置信息,需要自定义解密,所以需要自定义一个DataSource对象// 对用户名进行解密 return SM4Utils . decryptStr(super . getUsername());

2024-02-07 17:11:52 2842

原创 关于TDSQL(MySQL)的简单知识分享

最近在系统改造过程中,接触到了国产分布式数据库TDSQL,记录一下关于TDSQL的部分知识点。TDSQL是腾讯推出的一款兼容MySQL的自主可控、高一致性分布式数据库产品。

2024-02-07 06:00:00 3377

原创 使用Nginx搭建旁路服务器获取客户端真实IP

在实际业务开发过程中,很多时候有记录客户端真实IP的需求,但是从客户端发送的请求往往会经过很多代理服务器,导致后端服务获取的IP为代理以后的IP,不具有业务含义。为了解决这个问题,可以搭建一个旁路服务器,前端在发起请求的时候需要先请求旁路服务器,获取该客户端的真实IP(可对该IP地址进行缓存,不必每次发送请求前都先请求旁路服务器),在真正向后端发送请求时,将获取的IP地址放入请求头中,将真实的客户端IP地址进行传递。

2024-02-06 18:43:22 1434

原创 Spring Boot集成百度UidGenerator雪花算法使用以及自定义starter封装UidGenerator支持原生DB、Redis、自定义方式获取workID介绍

当下系统开发过程中,普遍会采用分布式微服务架构,在此技术背景下,分布式ID的生成和获取就成为一个不得不考虑的问题。常见的分布式ID生成策略有基于数据库号段模式UUID基于Redis基于zookeeper雪花算法(snowflake)等方案,这其中雪花算法由于其简单、独立、易用的特性,被众多技术选型推荐。雪花算法 (SnowFlake),是 Twitter 开源的分布式 id 生成算法,可以不用依赖任何第三方工具进行自动增长的数字类型的ID生成;雪花算法的核心逻辑是使用一个64 bit 的 long 型。

2024-02-05 21:19:33 2319 2

原创 记一次生产系统每隔10小时(36000000毫秒)固定进行一次Full GC排查思路

某个应用在生产环境通过系统监控发现,应用每隔10小时就会触发一次Full GC,该系统当时承接的业务量并不大,而且固定10小时就会进行Full GC,通过监控时间轴发现Full GC频率很规律,直觉告诉我这不是JVM自身触发的Full GC操作,应该是某个定时任务中进行了垃圾回收操作,但是什么业务场景会存在这种情况呢?方法调用进行了搜索,甚至为了防止是通过反射方式调用的,还检索了所有业务代码,但是均未发现有业务代码进行该方法的调用。,如果没有设置,默认为false,此时会通过反射调用。

2024-02-04 20:20:06 379

原创 基于Google guava工具实现一致性Hash算法的应用实践

在分布式架构系统中,要将数据存储到具体的节点上,如果采用普通的key%N取模Hash算法,将数据映射到具体的节点上,就有可能大部分数据集中在某一个节点,形成“热点”数据,造成数据分布失衡,二是如果有一个机器加入或退出这个集群,则大部分的数据映射都无效了,数据需要重新进行排列。基于上面普通Hash算法的问题,1997年由麻省理工学院提出一致性Hash算法,引入了“虚拟节点”的概念:即想象在这个环上有很多“虚拟节点”,数据的存储是沿着环的顺时针方向找一个虚拟节点,每个虚拟节点都会关联到一个真实节点;

2024-01-18 08:00:00 588

原创 SpringBoot框架自定义解析配置项占位符(${})获取配置

在最近项目开发中,有一个需求,针对自定义注解中字符串属性值的设置需要支持使用”${xx}“占位符获取在SpringBoot框架配置文件中配置项对应的属性值,而且支持多个”${xx}“标识的配置任意拼接。

2024-01-17 22:07:41 687 1

原创 Spring Boot框架中Controller层API接口如何支持使用多个@RequestBody注解接受请求体参数

众所周知,在Spring Boot框架中,Controller层API接口编码获取请求体参数时,在参数上会使用@RequestBody注解;如果一次请求中,请求体参数携带的内容需要用多个参数接收时,能不能多次使用@RequestBody注解呢?

2024-01-16 22:24:36 1640 4

原创 Java SPI机制了解与应用

JDK中的SPI实现,是由ServiceLoader类根据自定义传入类加载器或者应用程序类加载器在约定好的固定路径下(ClassPath:META-INF/services/)去查找和加载第三方接口实现类。服务提供方必须实现目标接口服务提供方必须在自身ClassPath:META-INF/services/路径下建立文件,文件名为目标接口全限定名;文件内容为实现目标接口的具体实现类全限定名。

2023-03-05 22:15:33 538 1

原创 layering-cache扩展——多级缓存有效时间增加随机浮动时间,防止缓存雪崩

一、背景最近在项目中有使用layering-cache(https://gitee.com/xiaolyuh/layering-cache?_from=gitee_search)进行多级缓存,有开发人员说想在缓存的时候增加一定时间的随机浮动,已到达防止缓存雪崩的目的,由于layering-cache是开源的,想增加此功能也十分简单,在此记录一下。缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。二、编码实现本次改造只针对二级缓存,也就是redis缓存层面

2022-04-11 22:24:03 920

原创 SpringBoot项目集成消息中间件以后@JmsListener注解不能生效的问题

SpringBoot项目集成消息中间件以后@JmsListener注解不能生效的问题

2022-03-28 23:34:34 2546

原创 SpringBoot监控Tomcat活动线程数来判断是否完成请求处理

SpringBoot监控Tomcat活动线程数来判断应用是否完成请求处理

2022-03-28 23:13:06 2279 2

原创 java中方法重载时,可变参数方法和定长参数方法调用的优先级

这是以前的一个面试题,虽然当时我回答了会优先调用定长参数方法,但是自己也不确定,后面用代码验证了一下,这里也记录一下:代码:public class MethodTest { public void sayHello(String... args) { System.out.println("hello,可变参数!"); } public void sayHello(String args, String str) { System.out.println("hello,定长参数!

2021-03-25 11:02:35 367

原创 使用TransmittableThreadLocal弥补InheritableThreadLocal的不足,可动态刷新线程变量

众所周知,使用InheritableThreadLocal可以实现父子线程之间的值传递,不过使用InheritableThreadLocal有一个隐藏的问题,子线程在创建的时候会从父线程InheritableThreadLocal中拷贝数据,一旦子线程创建成功以后,父线程更新了数据,对子线程是无效的,这种情况在使用线程池的时候会有数据不安全的问题,下面使用代码演示一下:public class ITLTest { // 声明一个线程池 private static final Execut

2021-02-09 11:48:51 323 1

原创 MyBatis的Mapper.xml文件中关于字符串的判断写法

在mybatis的Mapper.xml文件中,如果需要在<if>标签中判断字符串是否相等,是不能使用:<if test="str == '0'"></if>这种方式的。解决方式有两种:使用toString()方法:<if test="str == '0'.toString() "></if>使用单引号嵌套双引号的方法:<if test='str == "0" '></if>...

2021-01-26 10:37:48 4418 1

原创 使用C#实现一个可以预览图片,并且可以对图片进行自由裁剪预览的照相客户端

一、前言最近系统需要优化照相客户端,最开始的拍照客户端是使用浏览器插件实现的,不过兼容性不太好,然后使用java写了一款客户端,感觉还是有点臃肿,最近优化系统,决定重新使用C#实现了一个拍照客户端。二、功能演示:启动拍照客户端:客户端启动以后,会默认选择第一个照相设备打开,你可以自由选择照相设备,如果是后插入照相设备,点击【刷新】按钮即可。拍照:点击【拍照】按钮,会进入刚刚拍摄的照片的预览界面,左侧是原图,右侧默认是原图按照一寸照片的缩放。如果你想裁剪图片,可以拖动红色的矩形框,然后

2021-01-22 08:49:58 862

原创 Java web项目中使用C#配合开发,实现双屏显示功能

一、前言最近系统开发中,新增了一个需求,要求客户登记以后,需要有一个对外的屏幕显示客户登记信息,方便客户确认个人信息及相关信息是否有误。在了解相关需求以后,我打算使用C#来配合实现双屏显示功能。作为一名java程序员,在使用C#开发过程中,感觉也挺有意思的,特此,简单记录一下实现思路。二、代码实现java服务端创建一个spring boot项目,项目结构如下:导入maven依赖: <dependency> <groupId>or

2021-01-20 17:47:19 1182

原创 Windows系统对外开放指定端口

最近在远程部署系统的时候发现,系统部署完毕以后,oracle数据库却连不上了,数据库服务器网络没有问题,可以ping通,可就是连不上,最后猜测可能是数据库服务器没有对外开放1521端口,在打开端口以后,顺利连接,这里记录一下解决过程。打开控制面板:查看网络状态和任务:进入Windows防火墙设置:进入防火墙高级设置:创建入站规则:规则类型选择端口:设置连接类型和特定端口:设置连接条件:设置该规则应用时机:设置规则名称,点击【完成】

2021-01-07 09:35:20 1783

原创 2020年终简结——人生没有白走的路,每一步都算数

拖到现在才写2020年的年终总结,其实也没有什么特别的原因,主要就是因为懒。自己抽空看了一下,2019年简结,发现其实差别不大,甚至可以换个标题重新发一次。开个玩笑,开个玩笑,不过怎么说,2020年都是及其特殊的一年,不管对于世界来说,还是我来说,...

2021-01-06 21:10:38 257

takephotoclient.zip

使用C#实现一个可以预览图片,并且可以对图片进行自由裁剪预览的照相客户端

2021-01-21

pdf24-creator-9.0.1.exe

pdf24-creator-9.0.1安装包。100%免费的PDF创建和PDF转换器适用于所有Windows程序,还有很多您不会预计到从一个免费软件都有提供的功能:从几乎每一个Windows应用程序创建PDF文件、重新排序页面、合并、分割和使用密码来保护您现有的PDF文件。

2019-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除