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

前言

小一个月没更新了,有各种各样的事啦,这一篇有点水吧。围绕两方面,开发组件更新以及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.mzph.cn/news/788211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级讲解下Docker容器】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

openldap(一):简介和安装

目录 1 OpenLDAP简介1.1 LDAP介绍1、什么LDAP2、为什么要使用LDAP3、LDAP 的特点4、LDAP常用关键字5、LDAP的objectClass6、LADP使用场景 1.2 OpenLDAP介绍1、什么OpenLDAP2、OpenLDAP特点3、OpenLDAP的组件 2 OpenLDAP安装3 简单使用3.1 创建用户1、创建ou2、创建Group 3、创建…

剑指offer打卡 JZ10 斐波那契数列

在牛客网刷的&#xff0c;还是跟leetcode一样非acm模式&#xff0c;由于急着暑期实习题量不固定&#xff0c;八股算法轮刷 打卡内容偏个人笔记&#xff0c;本人水平一般(代码随想录稀里糊涂刷了一遍)&#xff0c;从小白开始分析(甚至会分析语法)&#xff0c;尽量一题多解深入探…

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…

2024年最便宜的VPS云服务器推荐

要寻找最便宜的VPS&#xff08;Virtual Private Server 虚拟专用服务器&#xff09;服务&#xff0c;您应该关注那些提供较低定价计划的知名和可靠的服务提供商。以下是一些在过去的信息中提及过的较为便宜或性价比较高的VPS提供商&#xff1a; 更多内容&#xff1a;https://ww…

网络编程详解(select poll epoll reactor)

1. 客户端服务器建立连接过程 1.1 编写一个server的步骤是怎么样的&#xff1f; int main(){int listenfd, connfd;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr, servaddr;listenfd socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr…

Java基础核心Map

在Java中&#xff0c;Map是一种用于存储键值对&#xff08;key-value pairs&#xff09;的集合类型。它提供了一种将键映射到值的方式&#xff0c;其中每个键在Map中都是唯一的。Map接口是java.util包中的一部分。 常用实现类&#xff1a; HashMap: 基于哈希表实现的Map&#…

设计一个Rust线程安全栈结构 Stack<T>

在Rust中&#xff0c;设计一个线程安全的栈结构Stack<T>&#xff0c;类似于Channel<T>&#xff0c;但使用栈的FILO&#xff08;First-In-Last-Out&#xff09;原则来在线程间传送数据&#xff0c;可以通过使用标准库中的同步原语如Mutex和Condvar来实现。下面是一个…

JavaScript发票查验接口如何集成?返回错误的信息原因是什么呢?

发票查验的过程中&#xff0c;很可能出现各种各样的问题&#xff0c;那么返回错误信息的原因一般可能是因为以下几种原因&#xff1a;第一种是接口没有调通&#xff0c;第二种是本身发票就是一张错票、假票&#xff0c;第三种可能是税局系统或网络问题等等&#xff0c;如果在使…

AI大模型学习:跨越技术与业务的桥梁

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐渗透到我们生活的各个角落&#xff0c;其中AI大模型学习更是成为了引领技术革新的重要力量。然而&#xff0c;要想真正驾驭这一技术&#xff0c;研究者不仅需要具备扎实的数学基础和编程能力&a…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…

网易云首页单页面html+css

网页设计与网站建设作业htmlcss 预览 源码查看https://hpc.baicaitang.cn/2083.html

Java | Leetcode Java题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; class Solution {public double findMedianSortedArrays(int[] A, int[] B) {int m A.length;int n B.length;if (m > n) { return findMedianSortedArrays(B,A); // 保证 m < n}int iMin 0, iMax m;while (iMin < iMax) {int…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点&#xff1a; 1.进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;…

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

ASTM C1186-22 纤维水泥平板

以无石棉类无机矿物纤维、有机合成纤维或纤维素纤维&#xff0c;单独或混合作为增强材料&#xff0c;以普通硅酸盐水泥或水泥中添加硅质、钙质材料代替部分水泥为胶凝材料&#xff0c;经制浆、成型、蒸汽或高压蒸汽养护制成的板材&#xff0c;俗称水泥压力板。 ASTM C1186-22纤…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

实验5-2:判断字符类别(多分支结构)

实验5-2&#xff1a;判断字符类别&#xff08;多分支结构&#xff09; 编写一个程序&#xff0c;其功能为&#xff1a;从键盘输入一个字符ch&#xff0c;判别该字符的类别&#xff0c;并输出向相应信息。 如果输入的字符介于A-Z之间&#xff0c;输出"Its a uppercase let…

Redis底层数据库之SDS

高速的存储介质&#xff1a;内存优秀的底层数据结构高效的IO模型高效的线程模型 1. 动态字符串SDS Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。 C语言种字符串存在的一些问题&#xff1a; 获取字符…

代码随想录刷题day42| 01背包理论基础分割等和子集

文章目录 day41学习内容一、 01背包之二维数组解法1.1、什么是01背包1.2、动态规划五部曲1.2.1、 确定dp数组&#xff08;dp table&#xff09;以及下标的含义1.2.2、确定递推公式1.2.3、 dp数组如何初始化1.2.4、确定遍历顺序1.2.5、计算并返回最终结果 二、 01背包之一维数组…