Eliauk
Vavr(颠覆你对Java的认知)
Vavr(颠覆你对Java的认知) 什么是Vavr Vavr core是一个Java函数库。它有助于减少代码量并提高健壮性。函数式编程的第一步是开始思考不可变的值。Vavr 提供不可变的集合以及必要的函数和控制结构来操作这些值。 引入依赖 maven 1234567<dependencies> <dependency> <groupId>io.vavr</groupId> <artifactId>vavr</artifactId> <version>0.10.4</version> </dependency></dependencies> gradle 123dependencies { compile "io.vavr:vavr:0.10.4"} gradle 7+ 123dependencies { implementation "io.v ...
ElasticSearch和Kibana配置
ElasticSearch和Kibana配置 1、docker-comppose 1234567891011121314151617181920212223242526272829303132elasticsearch: container_name: gw-es image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 volumes: - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./elasticsearch/logs/elasticsearch.log:/usr/share/elasticsearch/logs/elasticsearch.log - ./elasticsearch/data:/usr/share/elasticsearch/data #配置文件挂载 - ./elasticsearch/plugins:/u ...
解析双层DDF
需引入Maven依赖 12345678910 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.27</version></dependency><dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-tools</artifactId> <version>2.0.26</version></dependency> 1234567891011121314151617181920212223public Map<Integer, String> PDFIdentification(InputStream inputStream) { M ...
数据最终一致性问题
数据库和缓存Redis的一致性问题无论在面试还是平时使用的时候都是一个很常见且关键的问题这里我写一篇文章记录一下 Cache-Aside 旁路缓存模式,应用最为广泛的一种缓存策略。 读请求 首先查询redis查看是否存在,如果存在的话直接返回数据,如果不存在查询数据库,然后写入缓存 写请求 直接更新数据库然后删除缓存 为什么先更新数据库,而不是先删除缓存 因为在并发的情况下如果线程A先去删除缓存然后线程B去查询了数据K,此时线程B查询了数据K,并且将数据写入了缓存,然后线程A才去更新了数据库,然后此时我们的缓存就会是一个旧数据所以不能先删除缓存 在这种情况下怎么解决缓存一致性的问题呢 由于先删除缓存后更新数据会有缓存脏数据,所以业内又提出了延时双删,也就是在删除数据之后,更新数据库,防止别的线程读取了数据产生了脏缓存延时之后再进行一次删除,这个延时的时间一般稍微大于业务的读时间耗时,但是无论这个值如何预估,都很难和读请求的完成时间点准确衔接,这也是延时双删被诟病的主要原因。 先更新数据之后再删除缓存就没有问题了么 肯定不是的,在读写并发的时候也是会出现数据不一致的问题的,下面列举一 ...
AQS万字解析
AQS源码 最近研究了一下AQS的源码这里写一篇文章讲一下AQS到底是干什么的怎么工作的 AbstractQueuedSynchronizer AbstractQueuedSynchronizer这个类大家应该都听说过,他是一个用于编写并发编程的框架,可以在他的基础上对一些方法进行重写实现不同的策略 可以看到我们这个类是一个抽象类,但是他里边并没有任何一个抽象方法,而是留有很多这种以protected关键字修饰的方法 那么可能会有疑问,为什么在抽象类中一个抽象方法都没有,而是好多这种默认方法呢,因为为了子类更好的实现定制化如果子类不去实现的话直接就会抛出异常,而不是像抽象方法一样必须重写。 然后我们看一下里边的Node节点是怎样的 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939 ...
Mysql8.0中的Json数据类型
场景 在某张表中存在一个字段数据类型是一个Json,这个字段保存的数据格式是一个JsonArray,其中每个JsonObject都有一个属性为UUID,现在我们有以下两个需求 1、 根据UUID查询出对应的JsonObject 2、 根据UUID查询出对应的JsonObject并且将其删除,并保留该JsonArray的其他数据 条件只有一个UUID,而没有该JsonArray所在的数据的主键索引 根据UUID查询出对应的JsonObject 12345678/** * 通过uuid查询当页对应的敏感句对应的jsonObject */ @Query(value = "SELECT json_extract(machine_wording, '$[0]') " + "FROM xxxxxx " + "WHERE json_extract(machine_wording, '$[0].uuid') = :uuid", ...
多种格式文件合并为pdf(大数据量)
需求场景 最近遇到了一个比较恶心的需求,就是用户为了安全性,本地的富文本文件不存放到我们的minio中,而是富文本的原件存在了客户的服务器中,但是我们只能在数据库存放对应的路径。 富文本与档案的绑定关系是多对一,也就是多个富文本绑定一个档案,现在有个问题就是我们系统都是档案都是以pdf进行展示的,而客户那边档案下对应的富文本是多种数据类型的包括以下几种:jpg,png,jpeg,pdf,tif,tiff 所以我要去做兼容也就是说需要把档案下对应的各种格式的富文本拼接成一个pdf,然后再去展示。 先看一下我最开始写的方法 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112private b ...
导出Excel将指定列加锁不可编辑
导出Excel将指定列加锁不可编辑 最近写了一个需求,需要将Excel导出,但是有些列是不允许编辑的,所以需要将这些列加锁,不允许编辑,这里就记录一下 首先将整个sheet页全部加锁 需要创建一个Handler 123456789101112131415161718192021222324252627282930313233package org.irm.ai.sensitive.excel;import java.util.UUID;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.xssf.streaming.SXSSFSheet;import com.alibaba.excel.write.handler.SheetWriteHandler;import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;/** ...
Swagger刷新页面异常解决
直接引入maven依赖即可解决 12345678910<dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.22</version></dependency><dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.22</version></dependency>
优美的统一返回结果处理
优美的统一返回结果处理 我们写项目一般都会自己写一个Result对象,然后去处理,但是有一个问题,逐渐的接口写多了之后 会发现每次都要写这个被Result包裹会很麻烦,这时候我们就可以考虑将他抽取出来,使用一个Handler去处理 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.zang.blogz.result;import io.github.vampireachao.stream.core.optional.Op;import org.springframework.core.MethodParameter;import org.springframework.http.MediaType;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.server.ServerHttpRequest;impo ...
Sa-Token整合OAuth2
Sa-Token整合OAuth2 开源地址 https://gitee.com/ZVerify/zverify-blog 为什么要整合OAuth2 有些时候我们自己写的网站注册过于繁琐需要每个用户花费时间去注册,所以我们可以添加各种第三方登录,方便网站的用户去登录。 写之前思考一下 我们先想一下我们在进行第三方登录的时候是怎样的一个步骤,首先第三方登录都需要遵守OAuth2的流程,这里我使用了授权码模式,对于其他三种授权模式请参考网络文章,因为我使用了授权码模式所以他的整体流程都是一样的,这时候我们可以考虑使用模板模式,然后我们可能需要整合多个第三方登录,因为要考虑到用户的体验性,如果你只写一个的话,用户可能没有这个账号,所以可能会造成体验性差。这时候我们就需要横向扩展所以我们可以使用策略模式和模板模式。 这里我就用Gitee登录作为例子来说一下 整合Gitee第三方登录 https://gitee.com/api/v5/oauth_doc#/list-item-1,giteeOauth官方文档 这里的策略模式我就不讲解了,不懂的去看之前的文件上传,然后讲一下我所设计的模板,首先我们要 ...
SpringSecurity鉴权源码
SpringSecurity鉴权源码 之前写了一篇SpringSecurity的认证,下面接着来说一下鉴权对源码,SpringSecurity有一个专门对过滤器来进行鉴权FilterSecurityInterceptor,他是专门来进行鉴权对,下面来根据源码一点点看一下。 这次由于测试我们先写一下基本对数据,基本跟认证时候一样,不过要改一些配置 也就是我们对hello请求需要ADMIN这个角色才能通过访问,所以为了测试我把ADMIN角色都给每个用户 下面我们登陆之后把断点打到FilterSecurityInterceptor中看一下整体对流程 登陆就略过了,然后我们请求/hello接口 通过源码可以看到FilterSecurityInterceptor实现类Filter所以核心方法应该是doFilter()方法 调用了invoke方法 进来之后先判断一下isApplied(),这个方法其实就是看一下requert似不似等于null,并且request没有FILTER_APPLIED这个常量的Attribute,很明显返回false,所以就进入下一个if判断observeOnc ...
avatar
🐟认真摸鱼中
Eliauk
Future is now 🍭🍭🍭
前往小窝
公告栏
我是Dromara社区的一员并且是Easy-ES、Stream-Query的Committer,热衷于Open Source。有什么疑问可以加我微信Cizai_讨论一些技术问题


Dromara 是由国内顶尖的开源项目作者共同组成的开源社区。提供包括分布式事务,流行工具,企业级认证,微服务RPC,运维监控,Agent监控,分布式日志,调度编排等一系列开源产品、解决方案与咨询、技术支持与培训认证服务。技术栈全面开源共建、 保持社区中立,致力于为全球用户提供微服务云原生解决方案。让参与的每一位开源爱好者,体会到开源的快乐。Dromara开源社区目前拥有10+GVP项目,总star数量超过十万,构建了上万人的开源社区,有成千上万的个人及团队在使用Dromara社区的开源项目。
小站资讯
文章数目 :
56
本站总字数 :
6.7w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换关于博客美化设置切换全屏打印页面