续-开发组件更新-提效工具分享

news/2024/12/5 3:07:21/

前言

小一个月没更新了,有各种各样的事啦,这一篇有点水吧。围绕两方面,开发组件更新以及IDEA插件的分享,题目和我一样水,有点像是日本轻小说取名了,整这么长。本篇的触动来源于,我今天偶然发现之前开源的组件库有3个star还有一个fork,有人在关注,那赶紧更新更新,同时也写一篇文章,说明说明。

正文

开发组件更新

https://gitee.com/cloudswzy/general-components.git

redis幂等性校验

构成
基于Lua和AOP,切点是@IdempotencyCheck,注解参数是单次幂等性校验有效时间和幂等性校验Key,使用场景是前后端的接口

com.cloud.tool.annotation.IdempotencyCheck
com.cloud.tool.aop.IdempotencyCheckHandler
com.cloud.tool.service.LuaTool#idempotencyCheck

原理及作用
通知部分只有@Around,Key值默认默认为应用名(spring.application.name):当前方法名:当前登录人ID(没有SSO就是null):入参的md5值,如果checkKey不为空就会替换入参和当前登录人—>应用名:当前方法名:checkKey。
作用是在checkTime时间内相同checkKey只能运行一次,典型的固定时间窗口算法。
PS:这里使用入参的MD5值是为了避免过长入参导致key值过大
使用方法

Caffeine配置

构成
一般是推荐随用随建,这里提供一个通用配置案例,一般来说配置初始大小、最大数量、过期时间就可以。

com.cloud.tool.config.CaffeineConfig

使用方法

@Autowired
@Qualifier("commonCaffeine")
private Cache<String, Object> caffeine;Object countryObj = caffeine.getIfPresent("country");
if (Objects.isNull(countryObj)) {//缓存没有,从数据库获取并填入缓存caffeine.put("country", country);return country;
} else {
//缓存有,直接强制转换后返回return (Map<String, String>) countryObj;
}

Redisson配置

构成
修改String编码为默认编码MarshallingCodec,配置文件中主要是做了一个客户端的连接参数配置以及超时时间配置。

com.cloud.tool.config.MyRedissonConfig

作用
redisson官方中文文档

我是几个月前发现String序列化方式,在使用RBucket<>进行泛型转换时会报类型转换错误的异常,官方在3.18.0版本才修复了这个问题,不过我推荐没有图形客户端可视化需求的使用默认编码即可,有更高的压缩率,并且目前使用没有出现过转换异常。
目前Redis可视化工具最推荐官方的RedisInsight-v2,纯免费也还是比较好用,除此之外推荐使用Another Redis Desktop Manager。
Redisson我个人感觉是非常方便的一款用于操作Redis的客户端工具,中文文档20年更新的建议看个大概即可,一定要看英文文档,只有英文文档在持续更新。
使用方法

@Autowired
private RedissonClient redissonClient;public BigDecimal getIntervalQty(int itemId, Date startDate, Date endDate) {String cacheKey = "dashboard:intervalQty:" + itemId + "-" + startDate + "-" + endDate;RBucket<BigDecimal> bucket = redissonClient.getBucket(cacheKey);BigDecimal cacheValue = bucket.get();if (cacheValue != null) {return cacheValue;} else {BigDecimal intervalQty = erpInfoMapper.getIntervalQty(itemId, startDate, endDate);BigDecimal res = Optional.ofNullable(intervalQty).orElse(BigDecimal.valueOf(0)).setScale(2,RoundingMode.HALF_UP);bucket.set(res, 16, TimeUnit.HOURS);return res;}
}

线程池配置

构成
按照CPU密集型和IO密集型配置了两种线程池,普通的ThreadPoolTaskExecutor,Spring默认使用LinkedBlockingQueue、拒绝策略使用默认的抛异常、修改线程名前缀。

com.cloud.tool.config.ThreadPoolConfig
com.cloud.tool.properties.ToolProperties

使用方法

@Async("ioDenseExecutor")@Autowired
@Qualifier("cpuForkJoinPool")
private ForkJoinPool cpuForkJoinPool;
CompletableFuture.runAsync(() -> {
}, cpuForkJoinPool).handle((....

强制Spring读取配置文件使用UTF-8

重写配置类RewritePropertiesPropertySourceLoader,固定UTF-8编码,避免中文读取乱码。spring.factories里为org.springframework.boot.env.PropertySourceLoader接口提供一个新的实现类,并且使用@Order调高优先级。

IDEA插件推荐

GenerateAllSetter
好东西,快速生成setter的好东西,更新了之后还能生成getter了,更好用了。
GsonFormatPlus
将JSON快速转换成类,还可以生成包含内部类,并且自带驼峰和JSON注解,这不美滋滋?
MyBatisX
没啥都不能没这个,跳转XML太香了,还能标红提示mapper和XML是否正确映射。
更新记录


http://www.ppmy.cn/news/1404980.html

相关文章

#设计模式#3.1用做松鼠桂鱼来理解抽象工厂(对象创建型模式)

概念&#xff1a;xx工厂&#xff0c;xx产品 区分 工厂是动作&#xff0c;产品是结果&#xff08;菜品&#xff09; 概念&#xff1a;抽象xx&#xff0c;具体xx 区分 抽象产品&#xff1a;“中式菜品” 具体产品&#xff1a;“麻婆豆腐”、“宫保鸡丁” 抽象工厂&#xff1a;“…

AWS相关服务说明

互联网网关 官网 # 官网 https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/VPC_Internet_Gateway.htmlInternet 网关是一种横向扩展、冗余且高度可用的 VPC 组件&#xff0c;支持在 VPC 和 Internet 之间进行通信。它支持 IPv4 和 IPv6 流量。它不会对您的网络流量造…

[Linux]基础IO(中)---理解重定向与系统调用dup2的使用、缓冲区的意义

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…

合并两个单链表

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

探析Drools规则引擎的工作机制

目录 一、工作原理 二、工作流程 2.1 初始化环境 2.2 添加规则文件 2.3 编译规则文件 2.4 插入到工作内存 2.5 规则匹配与激活 2.6 规则执行 三、Drools 其他特性 3.1 符合事实 3.2 决策表 3.3 规则生命周期管理 3.4 规则流 四、Rete 算法 一、工作原理 Drools 规则引擎的工…

谷歌(Google)技术面试——在线评估问题(一)

谷歌&#xff08;Google&#xff09;面试过程的第一步&#xff0c;你可能会收到一个在线评估链接。 评估有效期为 7 天&#xff0c;包含两个编码问题&#xff0c;需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处&#xff0c;还提供了有关 Google 面试不…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

酷开科技智慧AI让酷开系统大显身手!

时代的浪潮汹涌而至&#xff0c;人工智能作为技术革新和产业变革的重要引擎&#xff0c;正深刻地影响着各行各业。在科技的海洋中&#xff0c;AI技术正逐渐渗透到我们的日常生活中&#xff0c;为我们带来前所未有的便捷和智慧。酷开科技用技术探索智慧AI&#xff0c;别看它只是…