Loading

随笔分类 -  Java

摘要:前提 公司在做一些金融相关业务,某些时候由于数据提供商定期维护或者特殊原因需要暂停某些服务的消费者。之前选用的消息队列技术栈是RabbitMQ,用于微服务之间的消息投递,对于这类需要暂停消费者的场景是选用注释掉消费者Bean中的相应Spring(Boot)注解重新发布来实现,后面需要重新启动消费就是 阅读全文
posted @ 2023-02-12 21:13 throwable 阅读(800) 评论(3) 推荐(0) 编辑
摘要:背景 笔者所在项目组在搭建一个全新项目的时候选用了SpringBoot3.x,项目中应用了很多SpringBoot2.x时代相关的第三方组件例如baomidou出品的mybatis-plus、dynamic-datasource等。在配置好相关依赖、最小启动类和配置之后,发现项目无法启动。于是根据启 阅读全文
posted @ 2022-12-04 18:22 throwable 阅读(6463) 评论(0) 推荐(1) 编辑
摘要:前提 Spring团队致力于为Spring应用程序提供原生映像支持已经有一段时间了。在SpringBoo2.x的Spring Native实验项目中酝酿了3年多之后,随着Spring Framework 6和Spring Boot 3的发布,对应的项目就是Spring Native,原生镜像支持将会 阅读全文
posted @ 2022-10-30 11:08 throwable 阅读(5666) 评论(4) 推荐(3) 编辑
摘要:前提 最近发现各个频道推荐了很多ULID相关文章,这里对ULID的规范文件进行解读,并且基于Java语言自行实现ULID,通过此实现过程展示ULID的底层原理。 笔者尝试把ULID基于Java实现的代码工程化,见仓库ulid4j,欢迎star或者提交PR ULID出现的背景 ULID全称是Unive 阅读全文
posted @ 2022-10-17 23:13 throwable 阅读(2337) 评论(0) 推荐(3) 编辑
摘要:前提 趁着国庆前后阅读了虚拟线程相关的源码,写了一篇《虚拟线程 - VirtualThread源码透视》,里面介绍了虚拟线程的实现原理和使用示例。需要准备做一下前期准备: 安装OpenJDK-19或者Oracle JDK-19 准备好嵌入式Tomcat的依赖,需要引入三个依赖包,分别是tomcat- 阅读全文
posted @ 2022-10-08 00:05 throwable 阅读(997) 评论(0) 推荐(1) 编辑
摘要:前提 JDK19于2022-09-20发布GA版本,该版本提供了虚拟线程的预览功能。下载JDK19之后翻看了一下有关虚拟线程的一些源码,跟早些时候的Loom项目构建版本基本并没有很大出入,也跟第三方JDK如鹅厂的Kona虚拟线程实现方式基本一致,这里分析一下虚拟线程设计与源码实现。 Platform 阅读全文
posted @ 2022-10-07 02:13 throwable 阅读(4694) 评论(4) 推荐(7) 编辑
摘要:前提 JDK19于2022-09-20发布GA版本,本文将会详细介绍JDK19新特性的使用。 新特性列表 新特性列表如下: JPE-405:Record模式(预览功能) JPE-422:JDK移植到Linux/RISC-V JPE-424:外部函数和内存API(预览功能) JPE-425:虚拟线程, 阅读全文
posted @ 2022-09-24 22:07 throwable 阅读(1820) 评论(0) 推荐(1) 编辑
摘要:背景 在日常写一些小工具或者小项目的时候,有依赖管理和依赖注入的需求,但是Spring(Boot)体系作为DI框架过于重量级,于是需要调研一款微型的DI框架。Guice是Google出品的一款轻量级的依赖注入框架,使用它有助于解决项目中的依赖注入问题,提高了可维护性和灵活性。相对于重量级的Sprin 阅读全文
posted @ 2022-02-22 22:55 throwable 阅读(3543) 评论(2) 推荐(2) 编辑
摘要:前提 当前(2022-02前后)日志框架logback的最新版本1.3.0已经更新到1.3.0-alpha14版本,此版本为非stable版本,相对于最新稳定版1.2.10来说,虽然slf4j-api版本升级了,但使用的API大体不变,对于XML配置来看提供了import标签对于多appender来 阅读全文
posted @ 2022-02-13 18:25 throwable 阅读(2100) 评论(2) 推荐(1) 编辑
摘要:前提 本文主要内容是分析JDK中的BitMap实现之java.util.BitSet的源码实现,基于JDK11编写,其他版本的JDK不一定合适。 文中的图比特低位实际应该是在右边,但是为了提高阅读体验,笔者把低位改在左边了。 什么是BitMap BitMap,直译为位图,是一种数据结构,代表了有限域 阅读全文
posted @ 2022-01-03 17:14 throwable 阅读(814) 评论(0) 推荐(1) 编辑
摘要:前提 之前在写一个通用HTTP组件的时候遇到过媒体(Media)类型multipart/form-data的封装问题,这篇文章主要简单介绍一下HTTP协议中媒体类型multipart/form-data的定义、应用和简单实现。 multipart/form-data的定义 媒体类型multipart 阅读全文
posted @ 2021-12-28 14:21 throwable 阅读(3390) 评论(0) 推荐(2) 编辑
摘要:前提 笔者在下班空余时间想以Javassist为核心基于JDBC写一套摒弃反射调用的轻量级的ORM框架,过程中有研读mybatis、tk-mapper、mybatis-plus和spring-boot-starter-jdbc的源代码,其中发现了mybatis-plus中的LambdaQueryWr 阅读全文
posted @ 2021-11-27 12:51 throwable 阅读(2556) 评论(0) 推荐(2) 编辑
摘要:前提 Stream是JDK1.8中首次引入的,距今已经过去了接近8年时间(JDK1.8正式版是2013年底发布的)。Stream的引入一方面极大地简化了某些开发场景,另一方面也可能降低了编码的可读性(确实有不少人说到Stream会降低代码的可读性,但是在笔者看来,熟练使用之后反而觉得代码的可读性提高 阅读全文
posted @ 2021-10-06 16:37 throwable 阅读(9972) 评论(19) 推荐(32) 编辑
摘要:前提 之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容。Java协程项目Loom(因为项目还在开发阶段,OpenJDK给出的官网https://openjdk.java.net/projects/loom中只有少量Loom项目相关的信息)已经在201 阅读全文
posted @ 2021-08-20 00:15 throwable 阅读(4129) 评论(0) 推荐(1) 编辑
摘要:前提 某一天点开掘金的写作界面的时候,发现了内置Markdown编辑器有一个Github的图标,点进去就是一个开源的Markdown编辑器项目bytemd(https://github.com/bytedance/bytemd): 这是一个NodeJs项目,由字节跳动提供。联想到之前业余的时候做过一 阅读全文
posted @ 2021-08-15 16:34 throwable 阅读(974) 评论(0) 推荐(0) 编辑
摘要:前提 某一天巧合打开了sofa-bolt项目,查找部分源码,看到了项目中使用bit数组实现功能开关的特性,感觉这种方式可以借鉴,于是写下这篇文章。 原理 bit数组的布局如下: 由于每个bit都可以表示1或者0,刚好对应于开关的ON和OFF。只需要定义好每个开关所在的bit数组下标和开关的状态(ON 阅读全文
posted @ 2021-07-31 10:30 throwable 阅读(473) 评论(0) 推荐(0) 编辑
摘要:前提 这是《冷饭新炒》系列的第五篇文章。 本文会翻炒一个用以产生访问令牌的开源标准JWT,介绍JWT的规范、底层实现原理、基本使用和应用场景。 JWT规范 很可惜维基百科上没有搜索到JWT的条目,但是从jwt.io的首页展示图中,可以看到描述: JSON Web Tokens are an open 阅读全文
posted @ 2021-02-20 08:55 throwable 阅读(5619) 评论(10) 推荐(10) 编辑
摘要:前提 UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符。对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述: UUID(也称为G 阅读全文
posted @ 2021-01-29 09:06 throwable 阅读(4370) 评论(2) 推荐(3) 编辑
摘要:前提 在很早很早之前,写过一篇文章介绍过Redis中的red lock的实现,但是在生产环境中,笔者所负责的项目使用的分布式锁组件一直是Redisson。Redisson是具备多种内存数据网格特性的基于Java编写的Redis客户端框架(Redis Java Client with features 阅读全文
posted @ 2021-01-11 22:40 throwable 阅读(2746) 评论(5) 推荐(5) 编辑
摘要:前提 在某一次用户标签服务中大量用到异步流程,使用了RabbitMQ进行解耦。其中,为了提高消费者的处理效率针对了不同节点任务的消费者线程数和prefetch_count参数都做了调整和测试,得到一个相对合理的组合。这里深入分析一下prefetch_count参数在RabbitMQ中的作用。 pre 阅读全文
posted @ 2020-10-18 12:28 throwable 阅读(14507) 评论(3) 推荐(2) 编辑