![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端
文章平均质量分 60
hhsway
这个作者很懒,什么都没留下…
展开
-
一次swagger导致的年轻代频繁gc
起因: 一次在测试环境top查看系统状况的时候,偶然发现一个java进程的cpu占用率较高,因为该程序最近不在测试阶段,应该是没有访问量的一个状态,cpu占用率却会频繁到7~15左右,对于一个没人任何请求进来的进程这肯定是不正常的。一天没写bug的我准备看下这个问题。经过:就去查看了下这个java项目的日志,接口和项目日志一条都没有打印。到这里,猜测cpu占用应该是gc进程一直在工作。因为是测试环境,没有打印出gc日志,在启动命令加上:-XX:+PrintGCDetails -XX:+PrintG原创 2020-07-14 23:21:06 · 905 阅读 · 0 评论 -
聊聊Spring集成mybatis用到的SqlSessionTemplate
一、SqlSessionTemplate的入场Spring在集成mybatis 的时候,并没有使用DefaultSqlSession来一个个getmapper。而是通过@Autowired来直接获取mapper接口,调用mapper方法。那么spring帮助自动注入的mapper到底是什么呢?其实是一种名为MapperFactoryBean的类,这个类继承了SqlSessionDaoSupport,可以直接获取到SqlSessionTemplate。使用SqlSessionTemplate来代理Defa原创 2020-06-30 22:52:16 · 1744 阅读 · 0 评论 -
简述tcp/ip三次握手、四次挥手、全连接、半连接
tcp/ip三次握手:1、client向server端发送建立tcp连接的请求报文,其中包含seq序列号,为client随机生成的数字x,并且将报文中的syn置为1,表示需要建立tcp连接。(syn=1,seq=x)2、server端回复报文,其中seq为随机生成的数字y,ack为x+1,syn为1。(syn=1,ack=x+1,seq=y)3、client端收到server端报文后,回复请求做ack验证,在服务端发送过来的seq+1。(syn=1,ack=y+1,seq=x+1)完成tcp连接。原创 2020-06-29 21:03:49 · 894 阅读 · 1 评论 -
在docker环境下 配置mysql双M结构主从配置
一直想要在测试环境模拟一下mysql的主从数据库搭建,但是又不想安装mysql环境,自然就想到了使用docker来完成两个mysql环境的搭建,直接启动两个mysql镜像的容器可是方便的很,简单记录一下搭建流程。一、mysql镜像的拉取由于电脑是mac,直接在docker官网下载docker desktop即可,传送门。也有人觉得mac端的docker环境很难用,起了linux虚拟机再用的,看个人选择,具体就不展开了。docker启动后直接拉取mysql镜像即可,文章使用5.7版本:docker p原创 2020-05-27 23:14:37 · 487 阅读 · 0 评论 -
logstash+logback+dingtalk实现springboot项目错误日志钉钉报警
须知:本文将说明如何将一个SpringBoot项目的日志通过logstash的过滤,将error等级的日志推送到钉钉进行报警,不涉及到elk的具体搭建以及配置。要将日志推送到钉钉需要使用钉钉自带的报警机器人,本文使用的为webhook机器人,可通过rpc请求推送消息到钉钉群内,具体钉钉机器人的使用不再多说,官方文档介绍的较为全面,读者可阅读文档(我是链接)或者自行阅读其他博客。logsta...原创 2019-12-02 19:50:48 · 2483 阅读 · 0 评论 -
druid配置:回收线程remove-abandoned使用踩坑
本次踩坑springboot版本2.1.1druid版本1.1.9先讲下此次踩坑是怎么回事项目本身为多数据源项目,第二数据源连接了一个只读db,因为该db从库需要进行迁移,所以让这边暂时先连接一下他们的主库,也就是读写库,本来就是改下配置文件重新发布的一件事,结果项目竟然上线后暴力测试几秒钟就挂了。赶紧看日志,发现是该数据源的连接池直接满了。。报错如下:### Error q...原创 2019-11-21 23:54:45 · 13943 阅读 · 4 评论 -
深入分析SpringBoot下的事件/监听机制以及实现所有事件的异步处理
什么是事件/监听监听/事件机制其实是由Spring实现的一种事件/监听器模式,可视为观察者模式。在Spring应用上下文ApplicationContext广播事件之后,监听器监听到后会做出相应事件的处理。相应在SpringBoot中,在充分使用到Spring的ApplicationListener的同时也实现了SpringBoot的监听器SpringApplicationRunListe...原创 2019-07-11 23:36:17 · 1501 阅读 · 0 评论 -
Java微信小程序接入企业付款到零钱
近日完成微信企业付款 API的接入,特此记录过程作为备忘。企业付款到零钱的功能的开通资格可以在微信商户平台上看到。简单来说就是在商户平台 - 运营工具 中可以看到如上图所示工具模块即可开通。开通条件就是刷够流水,连续30天在该商户平台上有过交易记录即可。开通功能后账号权限足够即可进入到功能模块中,如下图所示。现在微信平台支持商户平台手动操作付款以及API付款...原创 2019-05-29 21:01:55 · 4146 阅读 · 4 评论 -
CloseableHttpClient未设置Socket超时导致线程池堵塞
线上使用CompletableFuture.supplyAsync 来多线程下载影像,使用了默认的ForkJoinPool线程池。项目运行一段时间后下载影像方法全部报错:java.util.concurrent.TimeoutException下载方法如下:CloseableHttpClient http = HttpClientBuilder.create().bu...原创 2019-05-21 20:25:58 · 3759 阅读 · 1 评论 -
springboot集成rabbitmq并手动注册容器实现单个queue的ack模式
rabbitmq的基础内容在之前已经介绍过,若有疑问,可参考我的之前的博文RabbitMQ基础介绍接下来本篇博文中出现的代码,上篇rabbitmq基础博文中出现的四种exchange的类型以及死信队列的demo都可以在下方github地址中找到:github进入正题,本文会介绍两种实现rabbitmq的ack模式的方法,分别为:一、通过配置文件配置。二、通过手动注册 SimpleM...原创 2019-04-03 23:37:15 · 3274 阅读 · 0 评论 -
记一次springboot使用nacos报错
报错信息详情如下:java.lang.AbstractMethodError: null at org.springframework.core.OrderComparator.findOrder(OrderComparator.java:142) at org.springframework.core.annotation.AnnotationAwareOrderComparator....原创 2019-03-25 15:54:01 · 3256 阅读 · 0 评论 -
RabbitMQ结构和特性分析
RabbitMQ基本结构:基本概念:Message 消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。Publisher 消息的生产者,也是一个向交换器发布消息的客户端应用程序。E...原创 2019-02-26 09:28:22 · 209 阅读 · 0 评论 -
一个简单的md5加密
项目是maven项目,首先在pom.xml中加入以下依赖。<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId></dependency><dependency> &原创 2018-04-24 21:27:52 · 407 阅读 · 0 评论 -
java中正则表达式Pattern和Matcher
private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}"); public static boolean isMobile(String src) { if (StringUtils.isEmpty(src)) { return false; }...原创 2018-05-07 20:08:39 · 1103 阅读 · 0 评论 -
SpringBoot中通过实现WebMvcConfigurer完成参数校验
在Spring5.0和SpringBoot2.0中废弃了WebMvcConfigurerAdapter类。现有两种解决方案1 直接实现WebMvcConfigurer (官方推荐)2 直接继承WebMvcConfigurationSupport本篇文章讨论下使用第一种方式完成参数校验。首先附上代码。@Slf4j@Controller@RequestMapping("/goods")publi...原创 2018-05-08 18:37:21 · 15268 阅读 · 10 评论 -
redis+Cache实现缓存
@SpringBootApplication所在类添加@EnableCaching注解需要添加缓存的方法前添加@Cachable(cacheNames = "product", key = "100001" ,condition = "#result.code == 0",unless = "#result.code != 0")public ResultVO list (String count...原创 2018-07-03 20:14:38 · 2243 阅读 · 0 评论 -
简单的lamda用法
/** * @author hsw * @Date 14:36 2018/7/11 */@Datapublic class Boy { private String name; private int age; public Boy(String name, int age) { this.name = name; this.ag...原创 2018-07-11 15:41:29 · 646 阅读 · 0 评论 -
@Retryable和@Recover的使用
@Retryable和@Recover实现了重处理,重处理的场景是十分常见的,例如发起网络请求的时候,经常会因为网络波动等原因造成请求失败,产生异常,这时候可以使用@Retryable和@Recover简单的实现重处理。 添加maven依赖。<dependency> <groupId>org.springframework.retry</gr...原创 2018-07-23 21:19:16 · 11801 阅读 · 0 评论 -
通过实现ConstraintValidator完成自定义校验注解
首先贴上代码/** * @author hsw * @Date 11:28 2018/7/26 */@Datapublic class LoginVO { @NotNull @IsMobile private String mobile; @NotNull @Length(min = 32) private String passw...原创 2018-07-26 21:19:13 · 36370 阅读 · 9 评论 -
@Async异步线程池以及线程的命名
本文记录@Async的基本使用以及通过实现ThreadFactory来实现对线程的命名。 @Async的基本使用 近日有一个道友提出到一个问题,大意如下:业务场景需要进行批量更新,已有数据id主键、更新的状态。单条更新性能太慢,所以使用in进行批量更新。但是会导致锁表使得其他业务无法访问该表,in的量级太低又导致性能太慢。龙道友提出了一个解决方案,把要处理的数据分成几个li...原创 2018-08-25 17:08:18 · 23887 阅读 · 1 评论 -
Java double类型加法精度问题
近日在工作中使用double类型相加,发现结果精度出现问题。百度验证后得到答案,特此记录。double类型数据相加的时候直接使用+号,得到的结果会出现精度误差所以需要使用BigDecimal函数进行运算double v1 = 4.5;double v2 = 4.55;BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal ...原创 2018-04-14 00:00:03 · 4213 阅读 · 0 评论