![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 70
懵懵懂懂程序员
编程上不断摸爬打滚的程序员! 相信美好的一切即将发生,一切问题都能解决。
展开
-
SpringBoot的自动装配源码分析(2022.11.07)
SpringBoot自动装配源码分析原创 2022-11-07 20:49:39 · 289 阅读 · 0 评论 -
Spring+AOP+源码解析
AOP源码分析转载 2022-09-28 11:36:31 · 124 阅读 · 0 评论 -
1-为什么选择响应式Spring
1-为什么选择响应式Spring为什么Spring框架的开发团队决定将响应式方法作为Spirng5框架的核心部分?可以设想一下,当用户访问系统, 系统中存在的服务 A 需要访问服务 B 时,在服务 A 发出请求之后,执行线程会等待服务 B 的返回,这段时间该线程就是阻塞的,整个过程的 CPU 利用效率低下,很多时间线程被浪费在了 I/O 阻塞上,见下图:我们应该为了针对I/O实现更高的资源利用率, 应该使用异步非阻塞式交互模式。现实生活中, 这种通信就是(短信或者邮件)消息传递, 我们收原创 2021-12-31 18:12:45 · 642 阅读 · 0 评论 -
Sse实现服务端长时间推送消息到客户端(H5)
Sse实现服务端长时间推送消息到客户端(H5)介绍:SseEmitter是SpringMVC(4.2+)提供的一种技术,它是基于Http协议的,相比WebSocket,它更轻量,但是它只能从服务端向客户端单向发送信息。而webscoket 是双通道, 在SpringBoot中我们无需引用其他jar就可以使用。SSE 最大的特点,可以简单规划为两个长连接服务端可以向客户端推送信息websocket 协议,使用相对复杂默认支持断线重连需要自己实现断线重连文本传输二进制传输支持自定义发送的消原创 2021-12-31 15:36:45 · 2016 阅读 · 0 评论 -
异步编程CompletableFuture(2021.12.28)
异步(并发)编程CompletableFuture (2021-12-28)1.0 ExecutorService的submit()说明先进行介绍为什么需要学习CompletableFuture。以往我们需要获取到线程异步执行结果都是调用的submit()方法, 其方法有3个。Future<?> submit(Runnable task); 、 <T> Future<T> submit(Runnable task, T result);<T> Fu原创 2021-12-28 18:38:52 · 339 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁(读多写少场景)
ReentrantReadWriteLock读写锁适合读多写少的场景。读锁ReentrantReadWriteLock.ReadLock可以被多个线程同时持有, 所以并发能力很高。写锁ReentrantReadWriteLock.WriteLock是独占锁, 在一个线程持有写锁时候, 其他线程都不能在抢占, 包含抢占读锁都会阻塞。读写锁的互斥原则如下:读操作与读操作, 线程之间是可以共存的, 是相容的。读操作与写操作、 线程之间不能共存的, 是互斥的、 当有写锁操作时候, 其原创 2021-12-25 14:55:17 · 1122 阅读 · 0 评论 -
ElasticSearch搜索引擎-7-核心概念-学习笔记(2021.10.04)
ElasticSearch搜索引擎-7_核心概念_学习笔记(2021.10.04)ES的核心概念索引(Index)一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的 索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必 须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时 候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。 能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录 就是索引原创 2021-10-04 15:46:22 · 228 阅读 · 0 评论 -
读取HTML模板转流生成图片
读取HTML模板转流生成图片通过读取HTML定义好的模板, 动态装载数据, 获取到输入流, 然后生成PNG图片1.0 依赖<!-- 图片上传 start --> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId>原创 2021-08-24 14:34:31 · 311 阅读 · 0 评论 -
SpringCloudGateway整合knife4j在线api文档
SpringCloudGateway整合knife4j在线api文档整合官网: (点击打开)1.User用户微服改造1.1 添加依赖 <!--knife4j-micro-包含swagger2依赖--> <dependency> <groupId>com.github.xiaoymin</groupId&g...原创 2020-04-01 14:09:32 · 6700 阅读 · 4 评论 -
ElasticSearch搜索引擎-6_学习笔记(2021.6.14)
ElasticSearch搜索引擎-6_学习笔记(2021.6.14)ElasticSearch集群搭建前言:一个 Elasticsearch 集群有一个唯一的名字标识,这个名字默认就 是”elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入 这个集群。集群中包含很多服务器,一个节点就是其中的一个服务器。作为集群的一部分,它存储 数据,参与集群的索引和搜索功能。 一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色 的名字,这个名字原创 2021-06-14 01:01:23 · 164 阅读 · 0 评论 -
CyclicBarrier 让所有线程等待命令在继续执行
CyclicBarrier 让所有线程等待命令在继续执行字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。CyclicBarrier类位于java.util.concurrent包下,CyclicBarrier提供2个构造器:public CyclicBarrier(int parties, Ru原创 2021-06-08 10:39:38 · 404 阅读 · 0 评论 -
利用自定义RequestBodyAdvice过滤Json表情符号
自定义RequestBodyAdvice过滤表情符号/** * @Author: ZhiHao * @Date: 2021/6/4 19:03 * @Description: 过滤表情符号, POST-json请求 * @Versions 1.0 **/@ControllerAdvice@Slf4jpublic class FilterEmojiRequestBodyAdvice implements RequestBodyAdvice { @Override publi原创 2021-06-04 20:47:05 · 204 阅读 · 0 评论 -
CountDownLatch 等待所有线程执行完毕
CountDownLatch 等待所有线程执行完毕CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务B执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch类仅有且必需, 需要有参数的构造方法,初始化倒数次数public CountDownLatch(int count) { if (count < 0) thro原创 2021-06-04 20:46:30 · 678 阅读 · 0 评论 -
ElasticSearch搜索引擎-5_学习笔记(2021.5.30)
ElasticSearch搜索引擎-5_学习笔记(2021.5.30)IK 分词器和ElasticSearch集成使用前言: (IK官网)lucene默认是单字分词,在开发中不符合查询的需求,需要定义一个支持中文的分词器。IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。IK分词器有ik_max_word(最细切分)模式, 将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可原创 2021-05-30 23:22:35 · 122 阅读 · 2 评论 -
ElasticSearch搜索引擎-4_学习笔记(2021.5.23)
ElasticSearch搜索引擎-4_学习笔记(2021.5.23)Spring集成ElasticSearch (官网)前言:Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作,将原始操作 Elasticsearch 的客户端 API 进行封装 。Spring Data 为 Elasticsearch 项目提供集成搜索引擎。 Spring Data Elasticsearch POJO 的关键功能区域为中心的模型与 E原创 2021-05-24 00:47:36 · 656 阅读 · 2 评论 -
ElasticSearch搜索引擎-3_学习笔记(2021.5.5)
ElasticSearch搜索引擎-3_学习笔记(2021.5.5)1.0 学习ElasticSearch-API1.1.1 ElasticSearch依赖<!-- ElasticSearch 依赖 --><dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version&原创 2021-05-10 18:03:16 · 518 阅读 · 1 评论 -
ElasticSearch搜索引擎-2_学习笔记2021.4.18)
ElasticSearch搜索引擎-2_学习笔记(2021.4.18)前言:RESTful 介绍 , 我们通过RESTful来操作ElasticSearch (所有请求都是通过Postman )1.0 Elasticsearch 基本操作1.1.1 索引操作1.1.2 创建索引 (请求方式是PUT)对比关系型数据库,创建索引就等同于创建数据库(同时也可以在ElasticSearch的head插件中的界面管理中创建)在 Postman 中,向 ES 服务器发 PUT 请求 :http原创 2021-04-18 23:15:39 · 248 阅读 · 0 评论 -
ElasticSearch搜索引擎-1_学习笔记(2021.4.11)
ElasticSearch搜索引擎-1_学习笔记(2021.4.11)前言: (官网)ElaticSearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。The Elastic Stack, 包括 Elasticsear原创 2021-04-11 22:50:26 · 356 阅读 · 0 评论 -
Boot WebFlux-响应式编程-1(学习笔记 2021.03.26)
Spring Boot WebFlux (学习笔记-1 2021.03.26)前言: (SpringWebFlux官网) (Reactive官网)Spring MVC Web架构是基于阻塞式Servlet API构建的。Servlet 3.1后提供了非阻塞APISpring WebFlux是Spring Framework 5.0中引入的新的响应式Web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且无阻塞的,并通过Reactor项目实现Reactiv原创 2021-03-26 22:20:07 · 462 阅读 · 0 评论 -
使用自动更新https证书, 进行配Nginx学习笔记 (2021.02.08)
自动更新证书, 进行配Nginx学习笔记 (2021.02.08)使用开源的 acme.sh1.0 安装 acme[root@VM-0-9-centos]# curl https://get.acme.sh | shPS 我这下载失败了[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxzXALlz-1612798725754)(https://s3.ax1x.com/2021/01/30/yFEnL8.jpg)]我是通过下载源码包https://gi原创 2021-02-08 23:40:03 · 1921 阅读 · 0 评论 -
SpringMVC(请求包装器)解决流只能读取一次(学习笔记2021.01.21)
SpringMVC(请求包装器)解决流只能读取一次(学习笔记2021.01.21)前言:使用场景拦截器读取了request IO流方法request.getInputStream(), 然后到了我们的 (处理器/控制器/Controller), 在次调用request.getInputStream()的时候获取的流是空的, 或者通过流一次读取所有参数。另一个场景, 在全局异常处理器中, 输出JSON请求参数日志需要通过流方式进行读取。根据Servlet规范,如果同时满足下列条件,则请求体(Ent原创 2021-01-21 17:13:19 · 590 阅读 · 0 评论 -
SpringMVC的矩阵变量(学习笔记,2021.01.17)
SpringMVC的矩阵变量(学习笔记,2021.01.17)前言:根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对。规范中没对对应的术语。一般 “URL 路径参数” 可以被应用,尽管更加独特的 “矩阵 URI” 也经常被使用并且相当有名。在 Spring MVC 它被成为矩阵变量矩阵变量可以出现在任何路径片段中,每一个矩阵变量都用分号(;)隔开。比如 “/get;name=zhihao;age=18”。多个值可以用逗号隔开,比如 “age=18,20,25”,原创 2021-01-17 19:38:40 · 830 阅读 · 3 评论 -
BootMyBatis_Sql拦截器(自定义注解实现多租户查询)
MyBatis拦截器(自定义注解+实现多租户查询)前言:公司现有运营管理平台上的功能都要增加多租户, 原本功能都是单租户。就是要做数据隔离, 登录用户只能看到当前登录用户名下数据, 关键数据表都加了个用户ID字段, 之前的功能都已经写好, 所以就在想怎么在最少改动代码的情况下实现给之前的所有查询增加一个查询条件=值, 后来想到利用mybatis拦截器动态修改sql进行拼接多个查询。下面就开始利用来进行实现。 (技术框架<mybatis-plus.version>1.4.8<原创 2021-01-02 18:06:41 · 2140 阅读 · 10 评论 -
JSqlParser SQL语句解析器(学习笔记 2020.12.19)
JSqlParser SQL语句解析器 (学习笔记 2020.12.19)前言:JSqlParser是一个SQL语句解析器。它将SQL转换为Java类的可遍历层次结构。JSqlParser不仅限于一个数据库,而且还支持Oracle,SqlServer,MySQL,PostgreSQL等许多特殊功能。例如,它支持使用(+)的Oracle联接语法,使用::的PostgreSQL转换语法,关系型。运算符,例如!=等。用于安全的拼接SQL1.0 引入依赖 <dependency>原创 2020-12-19 22:18:22 · 1810 阅读 · 2 评论 -
Spring提供的事件发布、订阅(学习笔记2020.11.28)
Spring提供的事件发布、订阅(学习笔记2020.11.28)前言:ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理;如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法时,对应的Bean会被触发。Spring内置事件内置事件描述Cont原创 2020-11-28 00:02:07 · 563 阅读 · 0 评论 -
Spring Boot集成MongoDB学习笔记(2020.11.23)
SpringBoot集成MongoDB学习笔记(2020.11.23)前言: (官网 、文档)以前有学习过MongoDB, 但是好久没用过了, 忘记的差不多了, 最近新公司有用到这项技术, 就来复习一波, 顺便记录笔记MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型,没有事原创 2020-11-23 18:40:33 · 784 阅读 · 0 评论 -
Jenkins持续集成学习笔记(2020.11.22)
Jenkins持续集成学习笔记(2020.11.22)前言: (官网)以前很久学习过Jenkins持续集成进行快速部署项目进行测试, 最近换工作了, 发现新公司有用到, 现在来复习一下官网介绍: 领先的开源自动化服务器Jenkins提供了数百个插件来支持构建,部署和自动化任何项目。Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建 的趋势和稳定性。1.0 下载安装Jenkins下面在docker方式中安装Jenkins1.1.1原创 2020-11-22 14:47:21 · 334 阅读 · 0 评论 -
6-CloudAlibaba-Sentinel(规则持久化)学习笔记2020.10.25
6-CloudAlibaba-Sentinel(规则持久化)学习笔记2020.10.25前言: (官网 、动态规则)之前我们学习配置的规则都是临时的, 只要微服应用重启后, 规则就消失了, 需要重新配置。这样服务多了只后, 后续麻烦的事情会越来越多, 下面进行配置Push 模式规则持久化解决规则是临时的问题。规则管理及推送一般来说,规则的推送有下面三种模式:推送模式说明优点缺点原始模式API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDat原创 2020-10-26 15:00:42 · 448 阅读 · 0 评论 -
5-CloudAlibaba-Sentinel(热点参数与系统限流)学习笔记2020.10.25
5-CloudAlibaba-Sentinel(热点参数与系统限流)学习笔记2020.10.25前言:何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量原创 2020-10-25 22:41:08 · 201 阅读 · 0 评论 -
4-CloudAlibaba-Sentinel(整合OpenFeign)学习笔记2020.10.24
4-CloudAlibaba-Sentinel(整合OpenFeign)学习笔记2020.10.24前言: (Cloud官网 、GitHub官网)Sentinel与OpenFeign组件兼容。要使用它,除了引入sentinel-starter依赖关系之外,还需要完成以下两个步骤:在属性文件中启用伪装的Sentinel支持。 feign.sentinel.enabled=true添加openfeign starter依赖项以触发并启用sentinel starter:1.0 引入spring原创 2020-10-24 10:34:13 · 399 阅读 · 0 评论 -
3-CloudAlibaba-Sentinel(自定义降级方法)学习笔记2020.10.23
3-CloudAlibaba-Sentinel(@SentinelResource注解)学习笔记2020.10.23前言: (官网)Hystrix有@HystrixCommand指定条件与降级方法来进行服务降级, 返回自定义信息。Sentinel类似的注解就是@SentinelResourceSentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。使用 Sentinel Annotat原创 2020-10-23 17:20:45 · 769 阅读 · 1 评论 -
2-CloudAlibaba-Sentinel(熔断降级)学习笔记2020.10.22
2-CloudAlibaba-Sentinel(熔断降级)学习笔记2020.10.22前言: (官网)除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长原创 2020-10-22 18:31:13 · 204 阅读 · 0 评论 -
1-CloudAlibaba-Sentinel(限流)学习笔记2020.10.21
1-CloudAlibaba-Sentinel(限流)学习笔记2020.10.21前言: (Cloud的官网 、GitHub官网 、Sentinel官网)阿里巴巴的Sentinel对比奈飞的Hystrix 有什么不同, 有什么优势? (下面是官网复制的, 更为详细看官网)Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。原创 2020-10-22 15:38:53 · 826 阅读 · 0 评论 -
2-CloudAlibaba-Nacos(配置中心)学习笔记 2020.10.15
2-CloudAlibaba-Nacos(配置中心)学习笔记 2020.10.15前言:以前项目单独使用CloudConfig, 只能实现配置文件从云端(git、svn)拉取下来,作为项目启动使用。没有集成CloudBus的情况下, 更改了配置文件只能重新启动项目使其生效。现在使用Nacos的配置中心功能就能非常简单实现CloudConfig+CloudBus 云端拉取配置文件作为项目启动, 并实时更新配置文件。下面进行快速入门。1.0 新建模块/引入依赖<!--nacos-conf原创 2020-10-15 18:29:39 · 251 阅读 · 0 评论 -
1-CloudAlibaba-Nacos(注册中心)学习笔记 2020.10.13
1-CloudAlibaba-Nacos(注册中心)学习笔记 2020.10.13前言:阿里的Nacos 为什么要使用他, 而不使用Eureka 或者 Consul 这些微服常用的注册中心。阿里的Nacos优势在于更易于构建原生应用的动态服务发现、配置管理和服务管理平台。简单的相当Nacos 拥有了注册中心(类似Eureka )与配置中心(CloudConfig) 加上CloudBus(实时刷新配置属性,生效)、3个功能技术的集合。同时支持CP数据强一致性模式, 支持注册持久化实例, 该模式注原创 2020-10-13 16:57:52 · 275 阅读 · 0 评论 -
SpringCloudStream框架学习笔记(2020.10.10)
SpringCloudStream框架学习笔记(2020.10.10)前言: (官网)CloudStream是什么? 为什么需要学习使用? 能做什么? 能解决什么问题?官网翻译:Spring Cloud Stream是一个框架,用于构建与共享消息传递系统连接的高度可扩展的事件驱动型微服务。该框架提供了一个灵活的编程模型,该模型建立在已经建立并熟悉的Spring习惯用法和最佳实践的基础上,包括对持久性pub / sub语义,使用者组和有状态分区的支持。网上看到的一句话理解: 屏蔽底层消原创 2020-10-12 17:10:16 · 383 阅读 · 0 评论 -
SpringCloudConsul(注册中心)学习笔记(2020.09.21)
SpringCloudConsul(注册中心)学习笔记(2020.09.21)前言: (官网 、中文文档)Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul需要一个数据平面,并支持代理和本机集成模型。Consul附带了一个简单的内置代理,因此开箱即用,但也支持Envoy等第三方代理集成。重点: Consul 提供了服务发现、运行状况检查、配置中心、控制总线等等, 你安装原创 2020-09-22 15:26:37 · 401 阅读 · 0 评论 -
Spring Boot 2.3版本新特性(正常(优雅)停机与分层jar包)
Spring Boot 2.3版本新特性1. 正常(优雅)停机什么是正常(优雅)停机?官网翻译:所有四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序均支持正常关机。它作为关闭应用程序上下文的一部分发生,并在停止SmartLifecyclebean 的最早阶段执行。此停止处理使用一个超时,该超时提供一个宽限期,在此宽限期内,现有请求将被允许完成,但新请求将不被允许。不允许新请求的确切方式因所使用的Web服原创 2020-06-30 11:31:36 · 1866 阅读 · 0 评论 -
SpringBoot不使用模板引擎返回视图页面
SpringBoot不使用模板引擎返回视图页面页面资源都是放在resources/static 文件夹下面一: 继承WebMvcConfigurationSupport并配置视图解析器/** * @Author: ZhiHao * @Date: 2020/4/22 15:12 * @Description: MVC配置 * @Versions 1.0 **/@Configurationpublic class WebMvcConfig extends WebMvcConfigurat原创 2020-06-12 15:45:51 · 1743 阅读 · 0 评论 -
SpringBoot日期格式化处理(单独与全局)
SpringBoot日期格式化处理(单独与全局)包括单独,与全局1. 单独配置1.1 使用Springboot提供注解方式springboot默认提供,在需要的字段上使用@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")这个方式每个字段都需要加有点过于麻烦。1.2. 使用...原创 2020-04-14 15:22:52 · 13345 阅读 · 2 评论