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

前言

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

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

相关文章

FPGA + 图像处理 (二) RGB转YUV色域、转灰度图及仿真

前言 具体关于色域的知识就不细说了&#xff0c;简单来讲YUV中Y通道可以理解为就是图像的灰度图&#xff0c;因此&#xff0c;将RGB转化为YUV是求彩色图的灰度直方图、进行二值化操作等的基础。 HDMI时序生成模块 这里先介绍一下仿真时用于生成HDMI时序&#xff0c;用这个时…

ArcGIS Pro打不开Excel?Microsoft驱动程序安装不上?

刚用ArcGIS pro的朋友们可能经常在打开xls或者xlsx文件的时候都会提示&#xff0c;未安装所需的Microsoft驱动程序。 怎么办呢&#xff1f;当然&#xff0c;按照提示装一下驱动就会好吗&#xff1f;有什么状况会出现&#xff1f;有什么临时替代方案呢&#xff1f; 全文目录&a…

Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证

文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…

在flutter中添加video_player【视频播放插件】

添加插件依赖 dependencies:video_player: ^2.8.3插件的用途 在Flutter框架中&#xff0c;video_player 插件是一个专门用于播放视频的插件。它允许开发者在Flutter应用中嵌入视频播放器&#xff0c;并提供了一系列功能来控制和定制视频播放体验。这个插件对于需要在应用中展…

LeetCode 19.删除链表的倒数第N个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#x…

STM32F4系列单片机的定时器讲解和计数器,PWM信号输出,PWM信号捕获的实现对电机进行控制和监测功能

1.定时器功能介绍&#xff1a; 在控制领域里面&#xff0c;我们可以用信号输出定时器&#xff0c;进行PWM的控制&#xff0c;从而达到控制电机的目的&#xff0c;通过输入捕获功能可以用来接收外部的数字信号&#xff0c;用于测量脉冲宽度、频率或周期等。在这里给大家介绍下&…

备考ICA----Istio实验15---开启 mTLS 自动双向认证实验

备考ICA----Istio实验15—开启mTLS自动双向认证实验 在某些生成环境下,我们希望微服务和微服务之间使用加密通讯方式来确保不被中间人代理. 默认情况下Istio 使用 PERMISSIVE模式配置目标工作负载,PERMISSIVE模式时,服务可以使用明文通讯.为了只允许双向 TLS 流量&#xff0c;…

文本自动粘贴编辑器:支持自动粘贴并筛选手机号码,让信息处理更轻松

在信息时代的浪潮中&#xff0c;文本处理已成为我们日常工作与生活的重要组成部分。无论是商务沟通、社交互动还是个人事务处理&#xff0c;手机号码的筛选与粘贴都显得尤为关键。然而&#xff0c;传统的文本处理方式效率低下、易出错&#xff0c;已无法满足现代人的高效需求。…

netty使用ChunkedWriteHandler发送TextWebSocketFrame消息导致内存溢出

netty版本 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.50.Final</version></dependency>此版本ChunkedWriteHandler 的write方法如下 public class ChunkedWriteHandler exten…

【tensorflow框架神经网络实现鸢尾花分类—优化器】

文章目录 1、前言2、神经网络参数优化器2.1、SGD2.2、SGDM2.3、Adagrad2.4、RMSProp2.5、Adam 3、实验对比不同优化器4、结果对比 1、前言 此前&#xff0c;在【tensorflow框架神经网络实现鸢尾花分类】一文中使用梯度下降算法SGD&#xff0c;对权重 w w w和偏置 b b b进行更新…

【系统技术演进】2018-2023

引子 2018-2023年&#xff0c;我所在的公司&#xff0c;架构上经历了数次转折、变化&#xff0c;在这个过程中&#xff0c;产生了很多对技术和职业的思考&#xff0c;仅以此来记录&#xff0c;在这个过程中所经历的&#xff0c;以及成长的过程和反思。 故事开始 1.混乱的Dubb…

Java零基础入门-异常、线程(完结篇)

一、本期教学目标 掌握如何自定义异常。自定义异常实战练习。掌握进程/线程的概念及区别。理解并发与并行的区别。掌握如何创建线程。 二、前言 在上一期&#xff0c;我们是重点学习了异常如何声明、如何捕获、finally如何使用&#xff1f;以及对于多个异常怎么处理&#xff…