- 博客(346)
- 收藏
- 关注
原创 信号量
信号量信号量是什么信号量是一种用于控制对共享资源的访问的同步机制,他可以限制同时访问共享资源的线程数量,从而避免资源的竞争和冲突。使用场景:用于多线程的并发控制,类似于限流。信号量和限流的异同信号量和限流的使用场景侧重点不同:信号量通常用于控制对共享资源的访问;限流用于控制系统的输入和输出流量,防止系统过载;关注的维度不同限流通常是接口维度或系统维度的,一般是分布式下控制...
2023-12-17 14:30:00
347
原创 使用分布式锁实现定时任务的精确调度
使用分布式锁实现定时任务的精确调度在分布式系统中,实现定时任务的精确调度是一项具有挑战性的任务。由于分布式环境中存在多个节点,传统的定时任务可能会出现并发执行、重复执行或者错过执行的问题。为了解决这些问题,我们可以使用分布式锁来实现定时任务的精确调度。准备工作在开始之前,我们需要准备以下环境和工具:Spring框架Redis作为分布式锁的存储介质实现步骤1. 创建自定义注解首...
2023-12-17 14:18:00
423
原创 spring bean的生命周期
1. Spring Bean的生命周期简介Spring bean 的生命周期是指 Bean 在 Spring(IoC)中从创建到销毁的整个过程。在Spring框架中,Bean的生命周期包括以下阶段:实例化:通过构造函数或工厂方法创建Bean实例。属性赋值:调用Bean实例的setter方法将属性值注入到Bean中。初始化:执行Bean实例的初始化方法,例如init-method指定的...
2023-05-19 10:23:00
840
1
原创 关于GC
关于GCGC的触发时机YGC当Eden区空间不足时,就会触发YGC;FGC1. 老年代内存使用率达到配置的++阈值++,JVM CMSInitiatingOccupancyFraction 控制;2. 空间分配担保:老年代内存不足以放下新对象时(YGC前会检查老年代最大的连续空间能否存下新生代的所有对象);3. 元空间不足:元空间不足时,须进行扩容,会触发FGC4. System...
2023-03-18 16:24:00
402
原创 一个页面从输入URL到页面加载完成,都做了什么?
一个页面从输入URL到页面加载完成,都做了什么?1 解析URL首先会对URL进行解析,获取所需要使用的传输协议和请求的资源路径如果输入的URL中的协议或主机名不合法,将会把地址栏中输入的内容传递给搜索引擎。如果协议和主机名没有问题,浏览器会检查URL中是否有非法字符,会选择是否对其进行转义。2 缓存加载浏览器会从缓存中获取请求的资源如果请求的资源在缓存中没有失效,就直接返回缓存...
2022-11-10 19:35:00
376
原创 spring boot 处理跨域问题
spring boot 处理跨域问题不同版本会有不同的配置方式,这里只区分2.7和2.7之前spring boot 2.7.0+import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springfr...
2022-08-24 17:31:00
119
原创 MAC环境nginx搭建静态资源服务器
MAC环境nginx搭建静态资源服务器安装nginxmac环境nginx比较简单,使用命令安装即可brew install nginx查看nginx信息brew info nginx启动命令:launchctl 命令启动注意安装路径和版本信息launchctl load /usr/local/cellar/nginx/1.23.1/homebrew.mxcl.nginx.plist...
2022-08-20 13:23:00
1154
原创 mybatis字段映射的容错性
mybatis字段映射的容错性起因从一个bug说起,大致经历如下:经过一次selectById,然后用查出来的数据做updateById。数据的值 由 '' --> 0;找遍相关代码,没有发现什么地方有setType(0)的动作,然后怀疑mybatis查询时的字段映射做了容错处理,将''转换为Integer的0。复现:造一条数据,数据库值为'',然后selectById...
2022-08-19 20:57:00
119
原创 spring boot集成swagger3
spring boot集成swagger3swagger2的整合:https://www.cnblogs.com/chenglc/p/10910721.htmlswagger3的使用步骤和2略有差异maven依赖<dependency> <groupId>io.springfox</groupId> <artifa...
2022-01-12 10:49:00
269
原创 7层网络模型都在做什么
OSI七层模型OSI七层模型是一个规范,把网络从逻辑上分为7层。Please | 物理层(Physical Layer)Do | 数据链路层(Data Link Layer)Not | 网络层(Network Layer)Tell (the)| 传输层(Transport Layer)Secret | 会话层(Session Layer)Password (to)| 表示层(Pr...
2021-11-01 09:00:00
1257
原创 脱离spring cloud使用feign
优雅的http接口调用-feign。spring-cloud-feign是spring cloud微服务之间调用封装的功能,由于feign的封装和解耦做的比较好,因此脱离spring cloud也能使用。Spring boot项目使用feign项目背景:spring boot 2.2.5.RELEASE引入Maven<dependency> <...
2021-10-11 15:20:00
955
原创 Elasticsearch SQL
Elasticsearch SQL 是一个X-Pack组件,允许对Elasticsearch实时执行类似SQL的查询,为Elasticsearch提供一个强大而轻量的SQL接口。无论使用REST接口,命令行还是JDBC,任何客户机都可以使用SQL对EsasticSearch进行查询。Elasticsearch SQL是一个将SQL转换为DQL的转换器。主要针对于查询操作。约定很多人习惯地把...
2021-08-25 09:17:00
189
原创 Elasticsearch 快速入门
Elasticsearch 基本操作基本概念集群,节点,索引,类型,文档,分片和副本基本操作# 查看分片大小GET _cat/shards# 查看集群运行状况GET _cat/health?v# 查看集群中的节点列表GET _cat/nodes?v# 查询集群中的索引GET _cat/indices?velasticsearch支持restApi调用,执行http请求即可...
2021-07-22 09:08:00
138
原创 ElasticSearch安装
ElasticSearch安装elasticsearch安装比较简单,如果是本地使用,则拆箱即用。处安装的es为7.13.1版本下载地址:https://www.elastic.co/cn/downloads/elasticsearchWindows安装下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticse...
2021-07-22 09:06:00
131
原创 mybatis foreach list特殊处理
最近做一个功能,sql要用到 IN 条件,通过list传入IN 的值,如:SELECT * FROM table1 WHERE id in (1,2,3)对应的mybatis写法为:<select id="queryByIds" resultMap="resultMap" parameterType="list"> SELECT * FROM table1 ...
2021-06-24 14:10:00
202
原创 jstack排查锁竞争
排查线程信息的常用工具是jstack,jstack用于生成当前进程的所有线程快照。准备设计一个程序:两个线程,两个锁,互相等待造成死锁。然后使用jstack排查锁竞争情况。jstack使用一般出现cpu异常的情况下,会使用top命令找到cpu占用较高的进程,得到进程pid。如果定位到或怀疑是某个java进程出现锁竞争,可以直接使用jps找到对应的pid,进行一下操作。jstack查...
2021-06-08 10:47:00
263
原创 审计日志实现
审计日志实现目标记录用户行为:用户A 在xx时间 做了什么用户B 在xx时间 改变了什么针对以上场景,需要记录以下一些接口信息:时间ip用户入参响应改变数据内容描述标签-区分领域效果将此类信息单独输出log(可不选)持久化储存,便于查询追踪设计提供两个信息记录入口:注解和api调用信息通过log记录,输出到log和mq消费mq数据,解析到ES做...
2021-06-07 18:35:00
1301
原创 JVM生命周期
JVM生命周期此处的VM为HotSpot VM。JVM的启动方式启动HotSpot VM的组件是启动器。HotSpot VM有多个启动器,常见的启动器如下:Unix/linux 上最常见的是java;windows上是java和javaw;通过JNI接口JNI_CreateJavaVM启动内嵌的JVM;网络启动器javaws(java Web Start),网络浏览器通过它来情...
2021-05-25 11:41:00
128
原创 优雅代码-异常捕获
异常捕获程序中各层都会出现大量的异常,对应try catch finally就会大量出现,导致大量的冗余代码,甚至可能影响代码可读性,这种情况需要一个全局异常处理来解决推荐理由通过少量的异常处理代码,可以解决代码冗余方便统一管理异常定义全局异常类定义个全局异常类,和几个常见异常处理的定制方法/** * 全局异常处理器 * */@Slf4j@RestContr...
2021-02-20 19:52:00
111
原创 校验类注解的区别 @NotNull、@NotEmpty、@NotBlank
校验类注解的区别 @NotNull、@NotEmpty、@NotBlank使用场景@NotEmpty用在集合类@NotBlank 用在String@NotNull 用在基本类型注解的探究@NotEmpty/** * The annotated element must not be {@code null} nor empty. * <p> * Sup...
2021-02-20 19:51:00
445
原创 优雅代码-参数校验
参数校验web开发无法避免的参数校验,大量的参数校验很容易导致代码中有大量的if判断,如下if (StringUtils.isBlank(user.getUsername())) { return new Result("用户名不能为空"); } if (StringUtils.isBlank(user.getPhone())) { return new Resu...
2021-02-20 19:50:00
193
原创 优雅代码-命名规范
开发规范-命名规范接口开发一般常用的对象也就是三种:DTO VO PO,也可以有DODTO(Data Transfer Object)数据传输对象用接口的入参定义VO(View Object) 值对象业务对象,用于接口响应参数DO(Domain Object)领域对象就是从现实世界中抽象出来的有形或无形的业务实体。PO(persistant Object) 持久对象...
2021-02-20 19:49:00
79
原创 checkStyle 使用
checkStyle的使用checkStyle在idea中的应用手册1 安装配置2 确认插件勾选生效3 添加自定义规则这里自定义一个check规则,需要一份check的xml配置文件,在文末提供。如果添加顺利,就跳过此图,如果遇到下图相同的报错,可以调整对应的版本号来解决使用checkStyle做检查的方法附录-check配置<?xml versi...
2021-02-20 19:47:00
222
原创 IDEA快捷键-全量
IDEA快捷键idea 全量快捷键代码生成功能winmac代码智能生成Ctrl Shift Space⌃ ⇧ Space查找文件双击 Shift双击 ⇧快速修复问题Alt Enter⌘↩︎生成代码Alt Ins⌘N参数信息Ctrl P⌘P扩展选择Ctrl W⌘⌥ ↑收缩选择Ctrl Shift ...
2021-01-22 16:38:00
256
原创 支付中心-重复支付问题解决
支付中心-重复支付问题解决方案一笔订单,可以做多笔支付,怎么解决?重复支付的异常背景一笔订单,在支付中心可以选择多种支付方式。如支付宝扫码,支付宝app,微信扫码,微信小程序,银联....用户选择支付方式后,系统需要和第三方进行交互,获取到结果后,可能跳转到第三方收银台,也可能在当前页面展示收款二维码;用户打开一种支付方式,没有完成付款的情况下,又选择打开了其他支付方式。如准...
2020-11-12 11:07:00
1819
1
原创 GraphQL实战-第四篇-构建开发框架
GraphQL实战-第四篇-构建开发框架https://blog.csdn.net/xplan5/article/details/108846012前三篇是关于GraphQL的介绍和练手用的demo实现,从此篇开始,分享真正在实战中对GraphQL的应用。目的利用graphql的特性改变现有开发形式,提升开发效率在实际开发中,将graphql的部分沉淀出一个框架,便于新项目的...
2020-09-28 11:19:00
262
原创 GraphQL实战-第三篇-spring Boot 实现
GraphQL实战-第三篇-spring Boot 实现https://blog.csdn.net/xplan5/article/details/108748939在上一篇的java实现中,分享了使用GraphQL的基本流程,接下来分享一下在Spring Boot中对GraphQL的应用首先创建一个Spring Boot的项目POM依赖<?xml version="1.0...
2020-09-28 11:17:00
988
原创 GraphQL实战-第二篇-java实现及分析
GraphQL实战-第二篇-java实现及分析https://blog.csdn.net/xplan5/article/details/108748841到这里必须具备的知识储备:对GraphQL有简单的了解,了解Schema的常用类型。这里用一些demo示例来体验GraphQL的执行过程,这只是借助graphql-java实现的java版本。首先需要引入graphql-java...
2020-09-28 11:16:00
569
原创 GraphQL实战-第一篇-GraphQL介绍
GraphQL实战-第一篇-GraphQL介绍https://blog.csdn.net/xplan5/article/details/108716321GraphQL的前世今生Facebook的业务线有移动端,PC端和其它端,不同的场景下对一个资源所需要的信息是不同的。如移动端需要User的a、b、c三个字段,PC端需要b、c、d三个字段;对于此场景,要么开多个定制化API接口,...
2020-09-28 11:12:00
522
原创 @PostConstruct及跳坑记录
@PostConstruct及跳坑记录@PostConstruct的一个控制方法加载顺序的一个注解,如果使用恰当,可以方便解决很多问题,如果使用不当,也会出现一些认为莫名其妙的问题。这里说一下@PostConstruct和@Autowired 一起使用的一些问题。首先@PostConstruct是javax.annotation包下的注解,并不是Spring提供的。看一下servl...
2020-09-27 17:44:00
666
原创 java线程池源码
java线程池合理使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗;提高执行速度。当任务到达时,任务可以不需要等待线程创建就能立即执行;提高线程的可管理性。线程是系统重要资源,线程池可以控制线程数量,避免独自创建线程,引发系统问题。核心类-ThreadPoolExecutorjava.uitl.concurrent.ThreadPoolE...
2020-08-01 13:59:00
121
原创 Spring Cloud Config 本地配置覆盖远程配置
Spring Cloud Config 本地配置覆盖远程配置Spring Cloud Config 配置的优先级远程配置 > 本地配置 > java代码配置当需要本地配置优先时,可以限制远程配置的优先级配置spring: cloud: config: allow-override: true override-none: true...
2020-07-21 10:00:00
2641
原创 mybatis-plus update 更新操作
mybatis-plus update版本:3.0+根据id更新User user = new User();user.setUserId(1);user.setAge(29);user.updateById(); orInteger rows = userMapper.updateById(user);条件构造器作为参数进行更新UpdateWrapper&l...
2020-07-10 10:57:00
34392
3
原创 Spring Cloud Gateway 6 限流
Spring Cloud Gateway 限流限流的目的是通过对并发访问/请求进行限速或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可由拒绝服务,就是定向到错误页或友好的展示页,排队或等待Gateway内置过滤器工厂限流Spring Cloud Gateway官方就提供了RequestRateLimiterGatewayFilterFactory这个类,适用Re...
2020-06-17 14:55:00
241
原创 Spring Cloud Gateway 5 权重路由
Spring Cloud Gateway 权重路由使用场景:需要多版本服务控制的时候,需要对服务进行权重路由,最常见的场景就是一个服务有两个版本V1,V2,在线上灰度的时候,需要忘光动态实时推送路由的权重信息,如95的流量到V1,5的流量到V2.spring: cloud: gateway: routes: - id: service1_v1 ...
2020-06-16 14:11:00
450
原创 Spring Cloud Gateway 4 自定义Filter
Spring Cloud Gateway 自定义FilterSpring Cloud Gateway 的Filter分为GatewayFilter和GlobalFilter两种,二者区别如下GatewayFilter : 需要通过spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上或通过spring.cloud.default-filters...
2020-06-16 09:56:00
263
原创 Spring Cloud Gateway 3 内置Filter
Spring Cloud Gateway 内置FilterSpring Cloud Gateway中内置了很多过滤器,实现类有二十多个;分类几类:AddRequestHeader给请求加上一条header信息;spring: cloud: gateway: routes: - id: add_request_header_route ...
2020-06-15 16:56:00
187
原创 Spring Cloud Gateway 2 断言
Spring Cloud Gateway 断言Spring Cloud Gateway提供了很多断言设置,当http请求进入Spring Cloud Gateway时,网关中的路由断言工厂会根基配置的路由规则,对http请求进行断言匹配,匹配成功的请求进行路由转发,失败的直接返回是错误信息。以下是常用的断言工厂After设定一个UTC时间,此时间之后的请求会成功,此时间之前的请求...
2020-06-15 16:54:00
432
1
原创 Spring Cloud Gateway 1 基本使用
Spring Cloud Gateway 基本使用maven依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId&g...
2020-06-15 16:52:00
115
原创 事务及Transactional注解的失效场景
事务及Transactional注解的失效场景一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:try { //TODO something transactionManager.commit(status)...
2020-06-04 17:15:00
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人