![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java实用型
文章平均质量分 53
我们都爱松松吧
技术改变生活
展开
-
MySQL删除数据避免主从延迟实现方案
MySQL删除数据避免主从延迟实现方案原创 2022-08-31 11:30:54 · 634 阅读 · 0 评论 -
mac idea大小写快捷键
Command+Shift+U: 大小写切换原创 2022-03-08 14:59:23 · 1093 阅读 · 0 评论 -
记一次死锁问题排查
前言某一天晚上服务发生报警,但是由于发生报警的时间过晚,到第二天开始查找问题原因,经排查,竟然发现是mysql死锁导致的!!!一、原因分析2021-12-28 深夜,我负责的服务发生报警,通过查看错误日志,发现是mysql死锁导致的,如图:次日上午,通过查看sql:DELETE FROM table WHERE update_time < DATE_ADD(NOW(),INTERVAL -? SECOND),确定代码报错的地方如下:看原因是死锁导致的,初步怀疑是在同一时刻有其原创 2022-03-01 21:40:04 · 193 阅读 · 0 评论 -
记一次优化线程池的maxPoolSize来提高接口的QPS
前言项目中有一个逻辑是消费kafka消息,然后调用下游接口处理逻辑,作者在用kafka处理消息的时候,通过google的rateLimiter.acquire()方法来达到接口限流的目的,但是发现,之后无论如何增大RateLimiter.create方法中的permitsPerSecond参数,接口QPS都没有变化,于是就有了下面的一系列猜测+验证的解决方法。猜测+验证首先可以从自己应用到的组件开始排查,然后定位到大概的地方,优化并验证。比如:在项目中的kafka消费端,有以下线程池的应用@Au原创 2022-03-01 20:17:04 · 2208 阅读 · 0 评论 -
记一次内存溢出排查(OutOfMemoryError)和jvm调优
项目场景:上传Excel文件到阿里云的oss,定时任务进行异步下载进行文件解析。异步下载文件返回的是InputStream,项目里用了Apache.POI XSSFWorkbook进行转化,并对Excel中的sheet进行数据解析,然后异步写入es,大概就是这么一个场景。问题描述:资源泄漏:使用Apache.POI XSSFWorkbook时,工作簿永远不会被关闭(Resource leak: workbook is never closed warning when using Apache.POI原创 2020-12-08 23:19:00 · 1149 阅读 · 0 评论 -
ElasticSearch查询地图信息(geo-point类型)
最近有个需求是根据经纬度查询地图信息,刚开始有点懵懂,后来了解到es里有个geo-point的类型,这个是存放地理坐标点的信息也就是经纬度的信息,然后通过点位查询距离范围内也就是一个圆内的所有数据。设置数据格式地理坐标点(geo-point) 是指地球表面可以用经纬度描述的一个点。地理坐标点可以用来计算两个坐标位置间的距离,或者判断一个点是否在一个区域中。地理坐标点不能被动态映射(dynamic mapping)自动检测,而是需要显式声明对应字段类型为 geo_point ,例子中的es mapping原创 2020-11-17 21:44:11 · 1779 阅读 · 0 评论 -
es aggregation聚合查询
简单介绍:aggregations —— 聚合,提供了一种基于查询条件来对数据进行分桶、计算的方法。有点类似于 SQL 中的 group by 再加一些函数方法的操作。项目使用场景:获取es某字段去重后的列表(类似mysql中的distinct)/** * 获取es某字段去重后的列表(类似mysql中的distinct) * * @param field es中需要分组的字段 * @param esIndex es索引 * @return java.ut原创 2020-11-17 20:49:23 · 1159 阅读 · 0 评论 -
java下载文件到默认浏览器路径
在controller接口入参直接传HttpServletResponse response,然后设置文件名称和文件类型,InputStream是要下载的文件流,无论是网络文件还是存储在阿里OOS或者腾讯COS静态存储服务中的文件,都可以转化成InputStream的形式。 @GetMapping("/download") public void download(HttpServletResponse response) { return this.downloadFile(res原创 2020-11-11 17:20:38 · 4110 阅读 · 2 评论 -
Spring定时任务@Scheduled使用的那些坑
@Scheduled如何使用前言一、使用的那些坑?1.单线程2.@Async和@EnableAsync二、使用多线程总结前言@Scheduled是spring自带的注解,默认是单线程,常用作定时任务使用,但是如果是集群版的机器的话,就考虑加上分布式锁或者使用分布式定时任务代替。一、使用的那些坑?1.单线程因为@Scheduled默认使用的是单线程,如果有两个任务A和B,那么任务A要是阻塞了,任务B就无法执行。2.@Async和@EnableAsync为了解决单线程带来的线程阻塞问题,我们可以原创 2020-11-11 16:48:01 · 3079 阅读 · 6 评论 -
高并发下如何减少对MySQL集群的压力
高并发下减少对MySQL集群的压力前言一、高并发场景?1.确定高并发涉及的模块二、使用步骤1.引入库2.读入数据总结前言在高并发,大批量下的服务调用中,需要经常对数据库频繁的做操作,但是此时也会带来cpu飙高的问题,所以MySQL数据的DML操作就显得尤为重要,那么在高并发下如何减少对MySQL集群的压力呢?慢慢听我娓娓道来。一、高并发场景?1.确定高并发涉及的模块首先需要对服务有很深的了解,才知道哪些模块会涉及到高并发场景,我们可以通过观察服务监控看最近一个星期或者一个月的服务状态,一般互联网公原创 2020-09-18 17:13:16 · 875 阅读 · 2 评论 -
java自定义全局异常拦截类-@RestControllerAdvice和@ExceptionHandler
在java中如果出现异常的话,往往文案不是很友好,不能直观的看出是什么问题导致的,我们可以在一个服务里自定义全局异常拦截类,对某些特定的异常或者自定义的异常做拦截,然后返回合适的文案,让用户一看便知道问题出在哪,不多说直接上代码:package name.controller为controller所在的包目录,@Slf4j@RestControllerAdvice("***package name***.controller")public class ExceptionAdvice { /**原创 2020-09-16 18:00:26 · 801 阅读 · 0 评论 -
Java读取文件(File和Writer类的使用)
java读取文件前言一、读取项目中的文件?二、读取网络文件三、写入新文件总结前言在java开发中,经常会有读取文件的操作,本次介绍读取项目中的文件和读取网络文件两种方式。背景:需要对一批文件里的数据(数据按行分开)做分析处理,然后将分析出来的数据写入到新文件。一、读取项目中的文件?将需要读取的文件放入项目中的resources目录,然后用File类进行读取:File file = ResourceUtils.getFile("classpath:file_name.txt");Buffered原创 2020-09-16 16:28:13 · 1842 阅读 · 0 评论 -
java实用型-RocketMQ幂等消费
RocketMQ幂等消费前言一、分布式唯一id?二、使用步骤1.寻找uuid2.redis分布式锁总结前言我们在使用RocketMQ的时候,有时候需要对消费端做幂等处理,防止重复消费,作者在项目中用的最多的就是redis的分布式锁,特别是在高并发下,消费端的幂等处理显得尤为重要。一、分布式唯一id?如果项目中有用到分布式唯一id的话,就很简单,直接对该id做redis分布式锁处理,如果没有的话,则需要选用全局唯一的属性比如订单id,支付流水号等类似的能够保证全局唯一性,也可以自己用CurrentTr原创 2020-09-15 21:54:31 · 336 阅读 · 0 评论 -
java实用型-判断测试线上环境工具类
判断java环境工具类前言一、spring-Environment?二、项目使用总结前言在java项目中有时候需要判断当前运行的环境,比如测试环境还是线上环境或者其它的环境,我们可以写一个工具类,判断当前所处的环境,然后做不同的处理。一、spring-Environment?spring自带的类,Environment在容器中是一个抽象的集合,是指应用环境的2个方面:profiles和properties。其中properties属性包含环境变量等数据,我们可以拿出其中的数据然后判断当前的环境标识。原创 2020-09-15 10:45:19 · 681 阅读 · 3 评论 -
Java解耦的最佳方式-策略工厂模式
Java解耦的最佳方式-策略工厂模式前言一、自定义消息处理注解?二、定义消息处理类1.定义策略接口2.定义策略接口实现类3.定义消息类型枚举三、创建策略的工厂类四、项目使用总结前言在实际开发中,单独使用一种模式可能无法更完美解决问题,需要多种模式结合使用,比如发消息的时候,有多种消息类型可以支持,但是不同的消息类型有不同的处理逻辑,如果仅仅使用其中一种的话,并不能很好的解决问题,本期采用策略工厂模式给大家演示一下如何在代码中更好的解耦。一、自定义消息处理注解?@Target({ElementType原创 2020-09-14 21:51:10 · 773 阅读 · 0 评论 -
java实用型-线程池、队列、多线程的结合使用
记一次高并发下线程池、队列、多线程的使用前言一、自定义线程池配置二、用@PostConstruct启动多线程1. @PostConstruct介绍2.创建多线程并启动该线程三、高阶使用1.网关上做路由转发2.回调服务处理consumer总结前言在高并发情况下,多线程、线程池可能会经常用到,作者在一次高并发活动中处理回调逻辑,应用到了多线程、线程池和队列,以下介绍在其中的应用一、自定义线程池配置我们通过ThreadPoolExecutor创建了一个核心线程数为1,最大线程数为2,线程存活时间为60s,原创 2020-09-14 20:24:00 · 786 阅读 · 0 评论 -
PlantUML、draw.io、XMind等实用画图工具
java技术方案评审画图工具部分汇总前言一、ProcessOn二、PlantUML插件三、XMind思维导图四、draw.io五、ER图-Navicat自带功能总结前言一个完整的需求到上线,作为研发,中间少不了技术方案设计评审,那么对于技术方案评审中最直观的一种呈现方式即是各种流程图、时序图、UML图、ER图等,本期介绍技术方案评审中比较实用的几种画图工具。一、ProcessOn链接:ProcessOn在线画图软件此画图工具支持各种UML用例图、时序图、流程图等,个人尝试之后,感觉比较好用,但是免原创 2020-09-14 16:30:17 · 3294 阅读 · 4 评论 -
redis客户端-RedisDesktopManager
redis客户端:https://github.com/qishibo/AnotherRedisDesktopManager原创 2020-09-14 15:40:46 · 147 阅读 · 0 评论 -
java实用型:mybatis的好帮手-MybatisCodeHelperPro
前言相信我们很多人在java项目开发中,用到了mybatis框架,但是为了开发的效率,我们这期推荐一个好用的mybatis插件-MybatisCodeHelperPro,它能够帮你更快的生成DML语句,以及相应的数据表dao、实体model等。一、idea集成MybatisCodeHelperPro?1.idea-plugins-Marketplace下载可以在idea里的Preferences-plugins-Marketplace下载,搜索MybatisCodeHelperPro,出现如下界面:原创 2020-09-14 15:14:38 · 3375 阅读 · 0 评论 -
Java实用型-IDEA类注释和方法注释
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、idea配置类注释1.mac直接按快捷键“command+,”打开Live Templates2.新建一个Live Template之后,开始配置Abbreviation(快捷键)、Template text还有Edit variables二、idea配置方法注释1.新建一个Live Template之后,开始配置Abbreviation(快捷键)、Template text还有Edit variables2.配置Edit原创 2020-09-10 16:53:33 · 314 阅读 · 0 评论 -
java实用型-驼峰下划线互转
前言在java开发中,平常可能会经常接触到驼峰转下划线、下划线转驼峰的操作,在平常的项目中,我们可以写一个全局的工具类,防止重复码????的操作,不多说直接上代码驼峰下划线互转public class CamelAndUnderlineUtil { private CamelAndUnderlineUtil() { throw new IllegalStateException("CamelAndUnderlineUtil.Class"); } /**原创 2020-09-10 11:38:57 · 655 阅读 · 0 评论 -
java实用型-AOP日志切面
java实用型-AOP日志切面java实用型-AOP日志切面一、自定义注解二、自定义切面三、方法上添加注解java实用型-AOP日志切面一、自定义注解@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ParamLog { String description() default "";}二、自定义切面这里用的@Around环绕通知@Aspect原创 2020-09-10 11:19:34 · 278 阅读 · 0 评论