自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 「画蛇添足 · Spring Boot 动态 Bean 加载方案」

以上,忽略部分实现,完成了在 Spring 启动时读取 MySql 、Redis 中的配置信息,动态注册 BeanDefinition 的功能,Spring 在进行至创建 Bean 实例流程时,会创建该动态类的代理对象,并将对象注册至 RefreshableScope 中,由我们来料其生死。database-auto:使用 canal 监听 mysql 配置表的增删改,解析 mysql binlog 增量日志,修改表数据时,自动触发 BeanDefinition,无需手动调用接口。

2025-04-23 12:51:23 938

原创 「剑走偏锋 · Java 爬虫设计与实践」

叹:时运不济,命途多舛。值废时,冲牛马,煞榻下;忌努力,宜躺平。所行者皆废,所欲者皆不达。盖因时运不济,便纵有竭诚,难见成效。不若躺以听天命,平而顺自然。此乃:时也势也,运也命也,非人力所能移也。既得闲暇,更无他事,自当寻滋以为乐,无他,聊以消遣耳。所行者何为?曰:择一(网)站者而爬之。余虽喜书,好读书,读烂书,却不肯付之一文,皆因吾之钱财,当别作他用,岂肯轻易与之?择之者谁?曰:书旗也。爬虫有法,所行者,当循其道。一曰「载」,二曰「择」,三曰「析」,四曰「译」,五曰「排」,六曰「录」,依此六法,事乃成矣。

2024-08-23 13:56:01 1661

原创 MyBatis Plus 动态拼接查询条件/sql动态组装/QueryWrapper 合并

首先,我们需要知道字段和条件之间的对应关系,比如,对于 username字段,要使用 eq, 还是 like呢?看起来依然是十分啰嗦,于是,我们来简单封装一个工具类,根据传入的对象,不为空的字段,就动态拼接查询条件。接下来定义一个工具类,根据传入的实体对象,返回一个拼接完成的QueryWrapper查询对象。接下来,在Controller 只需如下,便能完成sql的动态组装。本文默认大家都已熟悉MyBatis Plus基本操作,不赘述。2022年1月27日 修订驼峰字段问题。代码变得干净又卫生。...

2021-12-25 13:56:48 23307 18

原创 实现 SpringBoot 定时任务的动态化配置【增、删、改】

在 springBoot 项目中,要使用定时任务变得十分容易,我们只需使用@EnableScheduling 开启定时任务支持,再配合 @Scheduled(cron = "cron表达式"),即可简单的集成定时任务功能,简单方便的同时,此种方式却也存在着硬编码问题,当我们需要动态的开启或关闭一个定时任务时,就需要修改源码重启项目,才能生效,达不到动态效果,下文教大家如何实现一个定时任务的动态增删改功能。首先看下我们要使用的三张表:scheduled_job :在定时任务中执行的工作 表表记录.

2021-12-12 00:07:23 14332 18

原创 「杞人忧天 · redisson-spring-boot-starter EntryRemovedListener#event.getValue NullPointerException 异常认领」

本人在2025年5月20日提交了一个关于Redisson的PR,涉及redisson-spring-boot-starter版本3.46.0。当前版本尚未包含此更新。未来版本(>3.46.0)中,若项目满足以下条件,可能会引发NullPointerException: 项目原本使用redisson-spring-boot-starter且版本≤3.46.0。 项目中使用RedissonMapCache并注册了EntryRemovedListener,且依赖event.getValue()进行后续逻辑处

2025-05-20 08:56:33 214

原创 「班门弄斧 · 记一次开源项目 redisson PR (not typo fix)」

在Redisson项目中,使用RedissonMapCache的EntryRemovedListener时,发现其value和oldValue赋值存在逻辑错误。具体表现为,event.getValue()返回现有值,而event.getOldValue()返回null,与预期不符。通过查看源码,确认了该问题,并提交了PR进行修复。虽然该问题可能未广泛影响用户,但通过这次修复,为开源项目贡献了力量,体现了开源社区的合作精神。

2025-05-20 08:47:49 426

原创 设计模式 实现一个通用建造者

建造者模式,在设计模式中属创建型模式范畴,意在将一个复杂对象的构建过程与其表现相互分离,逐步构建复杂对象,但一个复杂对象去对应一个 builder 感觉略显“奢侈”,考虑有无可能,抽取一个通用 builder,用于所有复杂对象的构建过程,见下文。

2022-12-07 22:16:53 292

原创 关于 JDK11 HttpClient restricted header name: “xxx“ 异常详解

可以看到,17下,重新又放开了部分请求头,虽有小部分请求头默认受限制,但还可以使用如下方式,增加系统参数以完全绕过安全检查,所以,17环境下,可以放心大胆不受限制的拥抱全新 httpClient api。原因是,设计者基于安全考量,在设置请求头时,做了安全检查,且在JDK11版本下并未提供绕过机制,在更高版本下(LTS JDK 17)提供了绕过机制。基于以上,如果你正在使用JDK11,且有设置以上请求头的需求,暂时无解,可以改用 apache 的 httpClient。

2022-11-27 19:45:10 1654

原创 SpringBoot 2.6.0 - 循环依赖异常 - 解决方案

在当下 springBoot 大环境下,我们更倾向于使用 java config 来配置和托管spring bean,而不是使用繁杂的xml,本人在使用 @Bean 去托管一个容器类 bean时,引发了一个循环依赖异常,特此记录一下(与 springBoot 版本相关)。问题代码如上代码,@PostConstruct 标记的初始化相关代码会在 @Bean 解析之前执行,在初始化代码中调用了用 @Bean 标记的方法,将会导致它提前执行,这样做可能会引发一个循环依赖异常,这与你 springBoot 的

2022-06-30 13:19:57 2518

原创 Java 业务参数校验/断言工具类

少量写起来倒也无妨,但一旦校验的东西多了,这种校验代码就会变得又臭又长,阅读时,也需费时思考校验的逻辑。于是,我们来定义一个Assert工具类来消除该重复,简化校验逻辑。代码变得干净又卫生。

2021-12-28 00:27:39 1748

空空如也

空空如也

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

TA关注的人

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