![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java那些热门事
文章平均质量分 78
aman801004
这个作者很懒,什么都没留下…
展开
-
Swagger的离线文档自动生成
Swagger的离线文档一、引言众所周知,Swagger需要在微服务运行的时候才能查看文档,那么在开发过程中,由于频繁地调试项目,Swagger文档将处于几乎无法使用的情况。那么使用如何离线文档呢?二、离线文档的选型1、Swagger2Markup:这是一个开源项目,项目的主页为:https://github.com/Swagger2Markup/swagger2markup具体用法可参照:https://cloud.tencent.com/developer/article/1332445原创 2021-07-21 16:43:23 · 1829 阅读 · 0 评论 -
让Mapper做更复杂的事情——GroupBy
此文之前先发一段鸡汤吧,至今我依然记着这么三段话:1、 人类进步最大的动力是懒;2、 能用机器完成的事情绝对不应该用人工来完成;3、 让框架来适应业务,而不是业务适应框架。1背景之前完成了,让通用Mapper支持Join的功能,再查阅业务代码,另一个常出现的XML就是SUM,COUNT,MAX,MIN 的相关统计的功能。当然用其他方式也能实现统计,比如Spark,Flink等大数据实时计算框架,但是这在绝大部分中小公司来说性价比是非常低的,本文暂不讨论,实时数据的计算。1.1 需要了解但是不介绍原创 2020-06-06 14:35:03 · 6084 阅读 · 2 评论 -
让通用Mapper支持Join
关于关系型数据库的Join关于关系型数据库的Join一直是争论不休的。笔者应该是在十年前就不太赞成Join的方式,主要是使用两个思路:1、 冗余字段,后台保证数据的一致性,前端只需要基于ORM的单表查询即可。2、 使用多个基于主键的查询来替代Join查询,利用数据库和自定义两级缓存保证效率。然而,在许多的业务中,恐怕正常情况也都不会轻易去修改ER模型,毕竟可能带来的伤害太大了,并且上述两种方式对于n:n的关系上是几乎无能为力的。同样现在的公司业务也是充斥着大量的Join,前段时间向主程了解了下,大原创 2020-05-30 19:00:55 · 1571 阅读 · 0 评论 -
通用Mapper的运行时注册
通用Mapper的运行时注册一. 背景在上一篇文章中介绍了JavaAssist的进阶的使用,主要是为了生成tkMybatis的Mapper和实体类,样例如下图所示图一 生成的类的样例1.1 需要探索的问题1、 Spring为了实现IOC,都会把Bean转化成BeanDefinition的方式保存在Map中,通常两种方式动态添加Bean比较常见,如图二所示图二 动态添加Bean的两种方式2、 在Mybatis中,我们知道最终的Bean是MapperProxy,这个是也是使用JavaAss原创 2020-05-22 16:24:03 · 360 阅读 · 2 评论 -
JavaAssist的进阶使用
JavaAssist的进阶使用1、 JavaAssist的介绍与常见使用方法众所周知,JavaAssist和CGlib作为两个著名的操作Java的ByteCode方式,笔者认为JavaAssist更加灵活些,而CGlib更偏向定制化的应用,比如SpringBoot;而JavaAssist有一级项目吗?笔者知道的有Dubbo和Mybaits。我们先看JavaAssist的常用功能。1.1 ClassPool的获取通常我们用以下方式来获取默认ClassPool池:ClassPool pool = Cl原创 2020-05-18 19:29:06 · 1590 阅读 · 1 评论 -
基于Redis的单个IP一段时间限制
基于Redis的单个IP一段时间限制一、实现类接口被刷攻击应该是很常见的情况,特别是与用户名密码相关的接口,赶紧补上ip一段时间访问限制的控制吧,基本原理也能用于抢购。我们先看Redis有这样一个命令:SETNX:将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。SETNX 是『SET if Not eXists』(...原创 2020-05-07 09:34:46 · 401 阅读 · 0 评论 -
一文读懂ClassLoader二
上文中介绍了自定义Classloader,以及class自动生成,加解密。那么本文主要针对URLClassLoader进行自定义。一、 网上重载URLClassLoader的代码以及问题下面是一段网上能够找到的一段代码,如图一所示,我们还可以把List改为ConcurrentHashMap完成单个的Jar的加载与卸载。初见这段代码是很奇怪的,于是我做了个试验。调用方式分别如下: 1、 ...原创 2020-05-04 16:23:24 · 313 阅读 · 0 评论 -
一文读懂Classloader(一)
一文读懂Classloader(一)附赠JavaAssist和CGlib的部分用法一、 略过的部分这个主题源自一个朋友的问题:如何在区块链上安全地完成热更新。自定义Classloader是一个比较成熟的方式,但是需要解决几个问题:1、 生成.class的安全问题2、 如何避免.class在JVM中加载的是旧版本的代码3、 如何动态生成.class文件按照惯例,我们依然省略一些基础但是...原创 2020-05-03 18:28:44 · 194 阅读 · 0 评论 -
Spring动态数据库源和主从切换
一、 略过不讲的部分1、 动态数据源AbstractRoutingDataSource的使用;2、 非事务的情况下动态数据源基于AOP的切换3、 注解@Order、@Transational的作用4、 Bean的生命周期以上问题需要掌握,可自行百度二、 动态数据库源与主从切换中碰到的问题与解决2.1 动态数据源碰到的问题笔者是这样完成动态数据源和事务切换的,如图一:1、在非事务...原创 2020-04-26 20:18:21 · 738 阅读 · 0 评论 -
ThreadLocal与FastThreadLocal的全面分析改进
ThreadLocal和相关的内容一、 略过但是需要掌握的内容1、 ThreadLocal的作用与使用2、 ThreadLocalMap的结构与和Thread的关系3、 ThreadLocalMap中的Entry为什么Key是WeakReference4、 ThreadLocal是否会内存泄露上面这些内容可以自行百度,先针对第四个问题做一些展开二、 ThreadLocal的内存泄露条...原创 2020-04-23 11:59:17 · 649 阅读 · 0 评论