Java
文章平均质量分 88
Java
BugRoot
CV大法(唯快不破),既搬既用。
展开
-
基于Redis组件之分布式RateLimiter限流
上文我们介绍了RateLimiter文章路径针对IP来限流的方式,上文的限流方案,只针对单应用情况,分布式集群下就不能使用上文的方式,分布式下的限流方案有很多种,这边展示的是Redis的封装redission框架。可以这么讲,jdk中的juc包提供的是单机版的并发业务。那么Redisson基本是基于juc实现的分布式的业务。一:Redission官网我们先去Redission官网喵喵redission官方地址我们可以看到wiki提供了很多功能介绍,分布式锁等,我们这篇文章主要讲限流。进入正题原创 2021-05-18 16:27:16 · 7991 阅读 · 3 评论 -
Cxf+WebService集成拦截器
最近公司与一些大公司对接服务,使用的是老掉牙的web service协议的接口,其中遇到了不少的坑。在此将自己的经验描述一下,让各位后辈能学习到东西。。。1:介绍webservice Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。 [1] &nbs原创 2021-05-14 11:01:34 · 1204 阅读 · 3 评论 -
Guava之RateLimiter限流
RateLimter是什么,我们为什么需要用到它,以物流系统作为例子:比如系统有一个物流信息查询接口,提供给第三方调用,接口暴露在公网,会出现什么问题,大致讲下如下问题:1、大量正常用户高频访问导致服务器宕机2、恶意用户高频访问导致服务器宕机3、网络爬虫等等限流常见方案:1:Nginx限流2:Tomcat限流3:漏桶算法4:令牌算法等等这里不多介绍,只介绍下RateLimter的令牌算法。其它的后续文章会加上。需要引入第三方组件库<dependency> <原创 2021-05-12 18:34:10 · 3132 阅读 · 0 评论 -
JDK1.8之DateTimeFormatter
我们常用的日期格式方式就是使用SimpleDateFormat,SimpleDateFormat在我们系统的里面,经常会用到,比如转换时间戳导出、打印啊等等。伪代码:正常我们都会这样使用转换时间注意:有些是需要的时候创建新实例如:工具类,创建新的实例SimpleDateFormat在并发下会出现出现时间不对,线程挂死等等。见源码:作者写的注释:翻译为:日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一种格式,则必须从外部对其进行同步。我们常用的forma原创 2021-05-11 16:25:43 · 3473 阅读 · 0 评论 -
Java+CountDownLatch多任务处理优化
前言项目有许多统计的功能,有些统计页面,要展示几个统计的结果,用户通过前台设置相关参数,后台实时统计并返回数据。后台查询正常查询结果是串行的。最好的用户体验,就是每一个操作都可以实时的展示数据,3秒之内应该是用户的忍受范围之内的了,所以做一款产品不仅要考虑用户交互设计,后端的优化也是比不可少的。举一个物流项目例子:1:统计订单量2:统计物流信息的时效3:统计客户下单量(按高到低排序)大家可以简单的看下以上这3项统计数据,总体来说,统计量还是不少的。最主要的还是要实时、实时、实时(重要的事情说三原创 2021-05-10 18:32:48 · 2799 阅读 · 0 评论 -
JDK1.8特性之StringJoiner
StringBuilder、StringBuffer、String这三个的区别,很多文章都有在说。这边也给大家做一个简要的概述一:String、StringBuilder、StringBuffer1:StringString类型是不可变对象,所以我们在每次对 String 类型进行改变的时候,其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。见源码:final修饰原创 2021-05-10 16:00:22 · 2978 阅读 · 0 评论 -
Nacos(第一篇)_Springboot2.x+Nacos配置管理中心
前言在开发过程中,我们通常会配置一些参数来实现某些功能,如:开启某些服务,邮箱通知,短信通知等;一般在这个时候,我们都是通过硬编码来实现、配置文件或数据库实现。Nacos 配置管理Nacos 是阿里巴巴的开源的项目,全称 Naming Configuration Service ,专注于服务发现和配置管理领域。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态配置服务、服务发现及管理、动态DNS服务,服务元数据及流量管理。Nacos 生态图原创 2021-05-10 11:08:18 · 3256 阅读 · 0 评论 -
Sentinel(第三篇)_Springboot2.x+Sentinel监控信息基于MySQL持久化
前言根据官方提供的wiki文档,sentinel控制台的实时监控数据,默认提供的存储数据时间为 5 分钟以内的数据。如果我们的需求是需要持久化的,那就需要我们自己定制实现相关的接口。https://github.com/alibaba/Sentinel/wiki/%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7本文只做一个持久化基于MySQL的方式,对于监控数据,可能用MySQL关系数据库存储不太合适,虽然MySQL也可以通过事件或者任务定期清理或者通过代码定时的清理。数据原创 2021-05-08 18:16:46 · 3941 阅读 · 0 评论 -
Sentinel(第二篇)_Springboot2.x+Sentinel源码版
前言:在第一篇,我为了偷懒使用的下载jar包版本启动的方式,由于现在需要集成nacos,则下载源码版。下载完成之后,解压进入解压后的文件夹如下然后我们打开当前项目,如下:打开可能没有展示完全,可能由于maven环境的加载,等等就好了。进入执行命令也可以用我们先试试我们下载的源码能不能启动,如果没有问题,我们再进行流控规则集中存储可以成功,接下来也要走一遍配置看看是否正常进入网站:localhost:8080并添加流控规则然后启动sentinel项目(第一篇搭建的项原创 2021-05-08 17:31:28 · 3441 阅读 · 0 评论 -
Sentinel(第一篇)_Springboot2.x+Sentinel
前言:Sentinel干嘛用的,我们先通过几个问题点,再通过这个几个问题点来看Sentinel是干嘛用的。限流:限流,字眼上的意思就是限制流量(请求数等),就是打个比方:一桶水最多装50毫升以每秒不超过10毫升,就不会溢出,假设瞬间你的水龙头滴水量超过了10毫升,那桶就会溢出,可能比较慢,但是如果一秒20毫升的水滴入,那很快就溢出了。可能一瞬间,也可能慢慢叠加。在系统上如果你的系统最大支持1000/qps,那如果一秒只有1000的qps进来,那服务器能稳定运行,如果一秒2000/qps的进来,服务器原创 2021-05-08 17:25:40 · 4049 阅读 · 1 评论 -
十万个为什么不推荐使用BeanUtils属性转换工具
至于为什么,我们跟着源代码来看,以及各种拷贝工具的性能效率;对比工具如下:1:apache common-beanUtils2:Spring beanUtils3:CGLib(实现converter与不实现converter情况,提供缓存BeanCopier提升性能)4:Mapstruct效率:getter/setter > Mapstruce > CGLib > Spring >apache common-beanUtils …;推荐直接定义转换类和方法可使用 IDE原创 2021-04-29 16:03:34 · 6655 阅读 · 0 评论 -
Hirbernate set属性自动更新
1原创 2020-08-05 10:35:15 · 15896 阅读 · 0 评论 -
JAVA 图片添加内容
公司最近需要进行图片内容动态添加数据需求boolean flag = PDFReader.createStringMark(“C:\Users\zhangwp\Desktop\1.jpg”, “CALG”,“C:\Users\zhangwp\Desktop\12.jpg”);System.out.println(flag);具体内容位置等根据需求调试/** * 给图片添加文字内容 * @param filePath 原图路径 * @param markContent原创 2020-08-05 10:12:39 · 16159 阅读 · 0 评论 -
JAVA 调用外部接口
系统需要调用guo wai一个接口,由于调用的guowai接口,需要通过proxy请求现在有3个方案1.使用proxy进行http请求2.直接使用guo wai服务器部署项目3.使用HK服务器作为中介获取返回数据1:问题,代理不稳定2:问题,相对于较繁琐推荐用3当不想每次写完代码,部署到HK服务器进行测试,可以先本地使用proxy进行测试,或者使用proxy IP。工具都有提供端口号,具体可以咨询软件提供商如需要用SoapUI,Postman测试,请看Utils内的HTTP Auth认原创 2020-08-04 08:57:25 · 16418 阅读 · 0 评论 -
JAVA HTTPS单向认证和双向认证以及JDK低版本请求
有没有童鞋遇到个问题,就是公司项目太老,用的是JDK1.7,JDK1.8以下的,由于需要调用HTTPS相关接口导致SSLException等异常,解决办法尝试过的童鞋会采用升级JDK1.8以上,了解版本更新的童鞋就会知道,JDK1.8已经默认支持了HTTPS相关支持。由于项目老,升级JDK导致很多地方出现问题。JDK1.7 默认是 TSLv1, 但是可以支持 TSLv1.1,TSLv1.2;JDK1.8 默认是 TSLv1.2由于JDK1.8以下,发送https请求会导致各种SSL异常信息报错常原创 2020-08-03 11:10:18 · 15549 阅读 · 0 评论 -
JAVA 利用iText解析PDF
系统对接了一个接口,遇到了利用iText解析PDFURL,解析下来导致文件已加密,损坏的问题。这篇文章针对于老项目,不能随意升级JDK,升级包的问题。iText-2.1.7.jar为例:import com.lowagie.text.pdf.PdfCopy;import com.lowagie.text.pdf.PdfImportedPage;import com.lowagie.text.pdf.PdfReader;import java.io.File;import java.io.Fil原创 2020-08-03 11:08:45 · 16277 阅读 · 0 评论 -
JAVA BigDecimal运算以及转换
介绍BigDecimal类处理高精度计算Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度;float和double只能用来做科学计算或者是工程原创 2020-08-03 11:07:19 · 15590 阅读 · 0 评论 -
JAVA HttpURLConnection请求异常
public String sendPost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = “”;URL realUrl = null;// URLConnection conn = null;HttpURLConnection conn= null;InputStream is = null;try {realUrl = new URL(ur原创 2020-08-03 11:06:51 · 17159 阅读 · 0 评论 -
JAVA SpringUtil.copyProperties和BeanUtils.copyProperties效率
(1):SpringUtil.copyProperties(class1,class2);// id属性泛型复制不到,由于继承的父类属性是泛型。(2):BeanUtils.copyProperties(class1,class2);// 此方式效率极慢,spring的copyproties稍可接受,get,set几乎1ms第一种方法,如果复制的类继承了父类,父类的ID属性是泛型并且序列化了会导致复制失败(详情可以debug跟代码);第二种方法:没有遇到上述问题。如果复制需要的属性不存在泛型问题,建议原创 2020-08-03 11:06:12 · 16455 阅读 · 0 评论