自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hhsway的博客

我还没秃,所以不强。

  • 博客(31)
  • 收藏
  • 关注

原创 SpringBoot中通过实现WebMvcConfigurer完成参数校验

在Spring5.0和SpringBoot2.0中废弃了WebMvcConfigurerAdapter类。现有两种解决方案1 直接实现WebMvcConfigurer (官方推荐)2 直接继承WebMvcConfigurationSupport本篇文章讨论下使用第一种方式完成参数校验。首先附上代码。@Slf4j@Controller@RequestMapping("/goods")publi...

2018-05-08 18:37:21 15281 10

原创 时间、空间复杂度

大 O 复杂度表示法:大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。时间复杂度:只关注循环执行次数最多的一段代码总复杂度等于量级最大那段代码的复杂度嵌套代码的复杂度等于内外层代码的乘积越高阶复杂度的算法,执行效率越低。常见的从低阶到高阶:O(1)、O(logn)、O(n)、O(nlogn)、O(n2 )// 全局变量,大小为10的

2020-12-21 21:05:24 268

原创 一次swagger导致的年轻代频繁gc

起因:​ 一次在测试环境top查看系统状况的时候,偶然发现一个java进程的cpu占用率较高,因为该程序最近不在测试阶段,应该是没有访问量的一个状态,cpu占用率却会频繁到7~15左右,对于一个没人任何请求进来的进程这肯定是不正常的。一天没写bug的我准备看下这个问题。经过:就去查看了下这个java项目的日志,接口和项目日志一条都没有打印。到这里,猜测cpu占用应该是gc进程一直在工作。因为是测试环境,没有打印出gc日志,在启动命令加上:-XX:+PrintGCDetails -XX:+PrintG

2020-07-14 23:21:06 926

原创 聊聊Spring集成mybatis用到的SqlSessionTemplate

一、SqlSessionTemplate的入场Spring在集成mybatis 的时候,并没有使用DefaultSqlSession来一个个getmapper。而是通过@Autowired来直接获取mapper接口,调用mapper方法。那么spring帮助自动注入的mapper到底是什么呢?其实是一种名为MapperFactoryBean的类,这个类继承了SqlSessionDaoSupport,可以直接获取到SqlSessionTemplate。使用SqlSessionTemplate来代理Defa

2020-06-30 22:52:16 1807

原创 简述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 928 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 510

原创 使用go开发一个自动加前后缀的脚本

开发 过程中经常遇到需要将多行的字符串格式化为mysql中的列表查询格式,之前一直使用sublime的多行选中来进行实现,虽然也比较方便但是时间久了还是想写个脚本来完成这些机械化的事情。正好最近在看go,编写了一个简单的脚本来实现前缀后缀的格式化。直接上代码:package mainimport ( "fmt" "github.com/atotto/clipboard")fun...

2020-03-20 11:49:21 771

原创 logstash+logback+dingtalk实现springboot项目错误日志钉钉报警

须知:本文将说明如何将一个SpringBoot项目的日志通过logstash的过滤,将error等级的日志推送到钉钉进行报警,不涉及到elk的具体搭建以及配置。要将日志推送到钉钉需要使用钉钉自带的报警机器人,本文使用的为webhook机器人,可通过rpc请求推送消息到钉钉群内,具体钉钉机器人的使用不再多说,官方文档介绍的较为全面,读者可阅读文档(我是链接)或者自行阅读其他博客。logsta...

2019-12-02 19:50:48 2515

原创 druid配置:回收线程remove-abandoned使用踩坑

本次踩坑springboot版本2.1.1druid版本1.1.9先讲下此次踩坑是怎么回事项目本身为多数据源项目,第二数据源连接了一个只读db,因为该db从库需要进行迁移,所以让这边暂时先连接一下他们的主库,也就是读写库,本来就是改下配置文件重新发布的一件事,结果项目竟然上线后暴力测试几秒钟就挂了。赶紧看日志,发现是该数据源的连接池直接满了。。报错如下:### Error q...

2019-11-21 23:54:45 14165 4

原创 深入分析SpringBoot下的事件/监听机制以及实现所有事件的异步处理

什么是事件/监听监听/事件机制其实是由Spring实现的一种事件/监听器模式,可视为观察者模式。在Spring应用上下文ApplicationContext广播事件之后,监听器监听到后会做出相应事件的处理。相应在SpringBoot中,在充分使用到Spring的ApplicationListener的同时也实现了SpringBoot的监听器SpringApplicationRunListe...

2019-07-11 23:36:17 1520

原创 Java微信小程序接入企业付款到零钱

近日完成微信企业付款 API的接入,特此记录过程作为备忘。企业付款到零钱的功能的开通资格可以在微信商户平台上看到。简单来说就是在商户平台 - 运营工具 中可以看到如上图所示工具模块即可开通。开通条件就是刷够流水,连续30天在该商户平台上有过交易记录即可。开通功能后账号权限足够即可进入到功能模块中,如下图所示。现在微信平台支持商户平台手动操作付款以及API付款...

2019-05-29 21:01:55 4207 4

原创 CloseableHttpClient未设置Socket超时导致线程池堵塞

线上使用CompletableFuture.supplyAsync 来多线程下载影像,使用了默认的ForkJoinPool线程池。项目运行一段时间后下载影像方法全部报错:java.util.concurrent.TimeoutException下载方法如下:CloseableHttpClient http = HttpClientBuilder.create().bu...

2019-05-21 20:25:58 3812 1

原创 springboot集成rabbitmq并手动注册容器实现单个queue的ack模式

rabbitmq的基础内容在之前已经介绍过,若有疑问,可参考我的之前的博文RabbitMQ基础介绍接下来本篇博文中出现的代码,上篇rabbitmq基础博文中出现的四种exchange的类型以及死信队列的demo都可以在下方github地址中找到:github进入正题,本文会介绍两种实现rabbitmq的ack模式的方法,分别为:一、通过配置文件配置。二、通过手动注册 SimpleM...

2019-04-03 23:37:15 3289

原创 记一次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 3280

原创 RabbitMQ结构和特性分析

RabbitMQ基本结构:基本概念:Message​ 消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。Publisher​ 消息的生产者,也是一个向交换器发布消息的客户端应用程序。E...

2019-02-26 09:28:22 220

原创 Linux安装

Linux安装近期在linux上安装了部分环境,记录一下,大部分为引用MySQL 安装http://www.runoob.com/mysql/mysql-install.htmlhttps://blog.csdn.net/SuperChanon/article/details/8546254redis安装首先来到redis的官方网站下载压缩包redis-4.0.10.tar.gz,拷贝...

2018-11-08 14:15:56 162

原创 @Async异步线程池以及线程的命名

本文记录@Async的基本使用以及通过实现ThreadFactory来实现对线程的命名。 @Async的基本使用 近日有一个道友提出到一个问题,大意如下:业务场景需要进行批量更新,已有数据id主键、更新的状态。单条更新性能太慢,所以使用in进行批量更新。但是会导致锁表使得其他业务无法访问该表,in的量级太低又导致性能太慢。龙道友提出了一个解决方案,把要处理的数据分成几个li...

2018-08-25 17:08:18 23981 1

原创 通过实现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 36424 9

原创 @Retryable和@Recover的使用

@Retryable和@Recover实现了重处理,重处理的场景是十分常见的,例如发起网络请求的时候,经常会因为网络波动等原因造成请求失败,产生异常,这时候可以使用@Retryable和@Recover简单的实现重处理。 添加maven依赖。<dependency> <groupId>org.springframework.retry</gr...

2018-07-23 21:19:16 11841

原创 简单的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 677

原创 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 2267

原创 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 1117

原创 一个简单的md5加密

项目是maven项目,首先在pom.xml中加入以下依赖。<dependency>    <groupId>commons-codec</groupId>    <artifactId>commons-codec</artifactId></dependency><dependency>    &amp

2018-04-24 21:27:52 464

原创 linux下curl命令的使用

此博文为linux学习笔记,仅供学习。学习博文地址:点击打开链接==================================================今天在阅读shell脚本监控tomcat宕机并自动重启的过程中,看到了一条curl命令如下curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code...

2018-04-19 22:06:09 1177

原创 快速部署tomcat项目的Shell脚本

工作需要负责项目的打包发布,一直手敲命令进行发布,费时费力。今天抽空学习了下shell脚本,以他人博客上的例子为参考,编写了两个shell脚本用于快速部署tomcat项目。学习的博客原文链接如下:点击打开链接========================================================================使用方法,将两个shell脚本置于tomcat的...

2018-04-18 17:34:46 1990

原创 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 4271

原创 echarts饼图如何修改百分比位数

今天工作中要求echarts生成的饼图需要显示百分比并保留一位小数,在echarts的series.lable.formatter中可以设置该属性。值得注意的是 自带的{d}%默认保留两位小数,如需修改小数位数,需要自己写一个函数。<script type="text/javascript"> // 基于准备好的dom,初始化echarts实例var myChart ...

2018-04-12 20:52:27 20952

原创 echarts饼图间隔

最近工作用到了echarts生成图表,特此记录。原本生成饼图如图所示。因要求数据为0时显示如下图2所示。附上代码。<script type="text/javascript">        // 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('main'));// 指定图表的...

2018-04-11 11:56:37 11707

原创 gson的使用

Gson gson = new Gson();Sell sell = new sell();Sell sell1 = gson.fromJson(SellJson,Sell.class);//json字符串转对象String text = gson.toJson(sell);//对象转字符串 map、list转字符串// listJson字符串转为listType type = ne...

2018-04-10 21:18:41 240

原创 lock和synchronized

线程共有五个状态:新建:调用start之前、就绪:调用start之后。run之前、开始:线程被设置为当前线程,开始执行run方法、阻塞:线程被暂停、死亡:线程结束1.lock和synchronized区别(1)synchronize是java的关键字,而lock是一个接口。(2)synchronize和lock都作为锁,synchronize可以在线程synchronize方法完毕或堵塞的时候释放...

2018-04-09 21:22:25 140

原创 springboot中websocket的使用

客户端<script>var websocket = null;if('websocket' in window){websocket = new WebSocket('ws://');}else {alert('浏览器不支持websocket')}websocket.onopen = function (ev) {console.log('websocket打开')...

2018-04-02 15:25:48 467

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除