自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

morris

The earliest moment is when you think it's too late.

  • 博客(534)
  • 资源 (30)
  • 收藏
  • 关注

原创 【Nacos】@RefreshScope注解的使用与原理

Value注解可以在项目启动时获取到配置中心的值,但是如果在Nacos配置中心后台修改了值,此时项目是无法动态感知修改后的值,需要利用@RefreshScope注解来实现动态感知。

2023-01-30 21:30:00 2569

原创 【Nacos】Nacos配置中心的使用与SpringCloud整合

官方文档: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-configNacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用Spring Cloud Alibaba Nacos Config组件,您可以在Nacos Server集中管理你Spring Cloud应用的外部属性配置。用于进行租户粒度的配置隔离。

2023-01-13 14:17:53 30038

原创 【Nacos】源码之服务端AP架构集群节点数据的同步

当Nacos集群部署时,临时实例数据在集群之间是如何进行同步的?Nacos针对临时实例数据在集群之间的同步开发了Distro一致性协议,Distro一致性协议是弱一致性协议,用来保证Nacos注册中心的可用性,当临时实例注册到Nacos注册中心时,集群的实例数据并不是一致的,当通过Distro协议同步之后才最终达到一致性,所以Distro协议保证了Nacos注册中心的AP(可用性)。

2023-01-09 15:15:01 29928

原创 【Nacos】源码之服务端AP架构集群节点的心跳检测

当Nacos服务端启动时怎么知道集群中有哪些节点?当新的节点加入集群或者集群中有节点下线了,集群之间可以通过健康检查发现。健康检查的频率是怎么样的?节点的状态又是如何变动的?状态的变动又会触发什么动作。在配置集群时,会在配置文件cluster.conf中指定集群中各个节点的IP和端口,Nacos服务端启动时会读取这个配置文件并解析,下面来看看这个解析过程。com.alibaba.nacos.core.cluster.ServerMemberManager#ServerMemberManagerServer

2022-12-20 15:56:42 30620

原创 【nacos】源码之服务端服务健康检查与服务查询

Nacos服务端在实例进行注册时,会在服务初始化的时候开启一个客户端心跳检测任务ClientBeatCheckTask。

2022-12-09 09:57:39 3585

原创 【Nacos】源码之服务端服务注册

Nacos客户端在启动时以及定时任务会发送Http请求,调用Nacos服务端接口/nacos/v1/ns/instance进行服务注册。我们根据url找到Nacos服务端服务注册的源码入口:InstanceController#register将请求封装为Instance,注意serviceName使用@@分隔组名和服务名,如DEFAULT_GROUP@@user,存入注册表中的serviceName也是包含组名的。com.alibaba.nacos.naming.controllers.Instanc

2022-12-05 15:16:49 3188

原创 【Nacos】源码之客户端服务发现

所谓服务发现就是指客户端从注册中心获取记录在注册中心中的服务信息。接下来阅读SpringBoot项目启动时Nacos客户端如何实现服务发现。

2022-11-09 16:28:44 864

原创 【Spring】Lifecycle的使用与源码分析

LifeCycle接口定义了Spring容器的生命周期,任何被Spring管理的对象都可以实现该接口。当Spring容器本身启动和停止时,会回调LifeCycle接口中定义的方法。

2022-10-27 14:56:04 32361

原创 【Nacos】源码之客户端注册服务

接下来阅读SpringBoot项目启动时Nacos客户端将自己这个实例注册到Nacos服务端的流程。

2022-10-25 14:28:26 31971

原创 【Nacos】Nacos注册中心的使用

版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E由于Spring Boot 2.4+和以下版本之间变化较大,目前企业级客户老项目相关Spring Boot版本仍停留在Spring Boot 2.4以下,为了同时满足存量用户和新用户不同需求,社区以Spring Boot 2.4为分界线,同时维护2.2.x和2021.x两个分支迭代。

2022-10-24 11:57:09 32110

原创 【SpringBoot】启动过程源码分析

最终会调用SpringApplication的构造方法。

2022-10-10 09:35:40 512

原创 【SpringBoot】@ConfigurationProperties注解的使用与源码分析

相信大家肯定了解@Value注解,它可以通过一个配置文件中的属性名与对象的属性进行绑定。@ConfigurationProperties注解的作用其实就类似于使用多个@Value注解同时绑定一个对象的多个属性,@ConfigurationProperties注解用于自动配置绑定,可以将application.properties配置中的值(准确来说是Environment中的属性值)注入到bean对象上,该注解的使用必须先将对象注入到IOC容器中才有配置自动绑定的功能。

2022-09-27 21:00:00 473

原创 【springboot】自动整合Tomcat原理

通过前面我们会SpringBoot的自动配置机制、Starter机制、启动过程的底层分析,我们拿一个实际的业务案例来串讲一下,那就是SpringBoot和Tomcat的整合。我们知道,只要我们的项目添加的starter为:spring-boot-starter-web,那么我们启动项目时,SpringBoot就会自动启动一个Tomcat。那么这是怎么做到的呢?

2022-09-09 08:00:00 14502

原创 【springboot】自动配置原理

SpringBoot中的自动配置,更多的是配置各种Bean,因为对于第一种配置,SpringBoot也无法去配置,比如数据库地址、密码之类的,SpringBoot肯定是无法知道的,但是对于端口号这些配置,SpringBoot也是会提供一种默认值的,也相当于一种自动配置。那SpringBoot是如何自动的帮助我们来配置这些Bean的呢?并且如果某些Bean程序员自己也配置了,那SpringBoot是如何进行选择的呢?

2022-09-08 08:00:00 14033

原创 【springboot】各种条件注解与源码分析

SpringBoot中众多的条件注解,都是基于Spring中的@Conditional来实现的,所以我们先来用一下@Conditional注解。}/*** 根据条件判断是否注入对应的Bean* @param conditionContext 应用上下文* @param annotatedTypeMetadata 加了@Conditional注解的方法的元数据信息* @return} }

2022-09-07 21:30:00 607

原创 【springboot】手写SpringBoot核心流程

通过手写模拟实现一个Spring Boot,就能以非常简单的方式就能知道Spring Boot大概是如何工作的。

2022-09-05 13:30:00 16804 1

原创 【Redis】Redis实现排行榜及相同积分按时间排序

在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有序集合对用户的分数进行存储,从而实现排行榜的需求,但是不同的场景排行榜的方式也略有不同,以下根据自己日常的开发进行了一下归纳总结。需求:对组队活动中各个队伍的贡献值进行排行。

2022-08-22 09:30:12 15447

原创 【Redis】Redis中使用Lua脚本

Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua具体语法参考:https://www.runoob.com/lua/lua-tutorial.html。

2022-08-22 09:27:57 15524

原创 【RocketMQ】源码之NameServer

Name Server主要是用于管理所有的broker信息,让producer和consumer都能获取到正确的broker信息,进行业务处理。类似于zookeeper的服务治理中心,在旧版本中使用的就是zookeeper,为什么放弃zookeeper?

2022-08-11 16:36:15 14353

原创 【RocketMQ】消息的高可用与负载均衡

最大重试次数小于等于16次,则重试时间间隔同上表描述。最大重试次数大于16次,超过16次的重试时间间隔均为每次2小时。//最大重试次数消息最大重试次数的设置对相同GroupID下的所有Consumer实例有效。如果只对相同GroupID下两个Consumer实例中的其中一个设置了MaxReconsumeTimes,那么该配置对两个Consumer实例均生效。配置采用覆盖的方式生效,即最后启动的Consumer实例会覆盖之前的启动实例的配置。......

2022-07-30 11:22:22 13259

原创 【RocketMQ】集群的搭建与高可用

RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。Master和Slave的区别在Broker的配置文件中,参数brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写入消息;...

2022-07-30 10:25:12 13330

原创 【RocketMQ】MMAP零拷贝在RocketMQ中的运用

零拷贝(英语Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销。可以看出没有说不需要拷贝,只是说减少冗余不必要的拷贝。下面这些组件、框架中均使用了零拷贝技术。...

2022-07-27 14:00:00 15467

原创 【MySQL】字符集utf8mb4无法存储表情踩坑记录

字段上的字符集优先级高于表的字符集,表的字符集优先级高于数据库的字符集,理论上只要表的字符集为utf8mb4就能存储表情,真的是这样吗?MySQL数据表的字符集已经设置成了utf8mb4,但是通过JDBC向数据库写入4字节的emoji表情时报错,但是通过直接使用SQL语句在命令行插入该4字节的emoji表情时却成功了。示例如下。...

2022-07-22 09:00:00 12373

原创 【RocketMQ】消息的存储设计

RocketMQ因为有高可靠性的要求(宕机不丢失数据),所以数据要进行持久化存储。所以RocketMQ采用文件进行存储。

2022-07-21 09:00:00 10775

原创 【RocketMQ】发送事务消息

同时,传统的大事务可以被拆分为小事务,不仅能提升效率,还不会因为某一个关联应用的不可用导致整体回滚,从而最大限度保证核心系统的可用性。例如指定消息的第一次消息最快回查时间设置为60秒,系统在第58秒时达到定时的回查时间,但设置的60秒未到,所以该消息不在本次回查范围内。等待间隔30秒后,下一次的系统回查时间在第88秒,该消息才符合条件进行第一次回查,距设置的最快回查时间延后了28秒。创建事务消息的Producer时必须指定TransactionListener的实现类,处理异常情况下事务消息的回查。...

2022-07-20 08:00:00 11009

原创 【计算机网络】零拷贝之MMAP

mmap/munmap接口是用户空间的最常用的一个系统调用接口,无论是在用户程序中分配内存、读写大文件,链接动态库文件,还是多进程间共享内存,都可以看到mmap/munmap的身影。

2022-07-19 15:00:00 19043

原创 【RocketMQ】玩转各种类型的消息

消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与

2022-07-08 08:00:00 19081

原创 【RocketMQ】RocketMQ快速入门

Metaq1.x是RocketMQ前身的第一个版本,本质上把Kafka做了一次java版本的重写(Kafka是scala语言开发)。Meta2.x,主要是对存储部分进行了优化,因为kafka的数据存储,它的partition是一个全量的复制,在阿里、在淘宝的这种海量交易。Kafka这种机制的横向拓展是非常不好的。2012年阿里同时把Meta2.0从阿里内部开源出来,取名RocketMQ,同时为了命名上的规范(版本上延续),所以这个就是RocketMQ3.0。现在RocketMQ主要维护的是4.x的版本,也是

2022-07-05 08:00:00 19824

原创 【RocketMQ】RocketMQ的安装

参考官方安装文档:https://rocketmq.apache.org/docs/quick-start/本次安装环境为Ubuntu 20。准备工作:正式安装:解压建立软连接启动name server修改配置文件runserver.sh中的jvm参数,生产环境无需修改,测试环境可能因内存不足无法启动。由原来的修改为启动:启动broker修改配置文件runbroker.sh中的jvm参数,生产环境无需修改,测试环境可能因内存不足无法启动。由原来的改为启动生产和消费

2022-07-04 20:00:00 3155 2

原创 【java8】自定义Collector

Collector接口包含了一系列方法,为实现具体的归约操作(即收集器)提供了范本。我们已经看过了Collector接口中实现的许多收集器(由Collector接口的工具类Collectors提供),例如toList()或groupingBy()。这也意味着你可以为Collector接口提供自己的实现,从而自由地创建自定义归约操作。要实现自定义收集器,只需要实现接口即可.Collector接口的声明如下:泛型介绍T:stream在调用collect方法收集前的数据类型A:A是T的累加器,遍历T的时候

2022-06-30 08:00:00 224

原创 【java8】自定义Spliterator

Spliterator是Java 8中加入的另一个新接口;这个名字代表“可分迭代器”(splitableiterator)。和Iterator一样,Spliterator也用于遍历数据源中的元素,但它是为了并行执行而设计的。自定义Spliterator需要实现Spliterator接口。T:Spliterator遍历的元素的类型tryAdvance:类似于普通的Iterator,因为它会按顺序一个一个使用Spliterator中的元素,并且如果还有其他元素要遍历就返回true。trySplit:把一些

2022-06-28 17:44:37 1218

原创 【java8】静态方法与默认方法

静态方法和默认方法都必须有自己的实现,如果一个类既有静态方法,又有默认方法,还有一个抽象方法,那么它还是一个函数式接口。Java8为接口引入了静态方法功能。静态方法必须有自己的实现,而不能仅仅是一个接口声明,不然编译是会报错的。以前为一个接口编写一个工具类,需另外写一个工具类如XxxUtil,现在可以直接将工具类的方法直接写在接口的静态方法中了。后面我们会看到JDK为我们提供的工具方法大部分都在函数式接口中,如java.util.function.Function。函数式接口Function提供一个抽象方

2022-06-28 09:00:00 249

原创 【java8】时间日期的使用与格式化

LocalTimeLocalDateTimeInstantInstant类用于处理机器可读的时间格式,它将日期时间存储在unix时间戳中。DurationDuration用于表示两个时间之间的差值。PeriodPeriod用于表示两个日期之间的差值。ZoneId方法描述String getDisplayName(TextStyle style,Locale locale)用于获取区域的文本表示形式,例如“北京时间”或者"+08:00"abstract Str

2022-06-27 20:00:00 1582

原创 【java8】函数式接口

有且只包含一个抽象方法的接口,称为函数式接口。可以通过Lambda表达式来创建函数式接口的对象(只有函数式接口才能用Lambda表达式)。可以使用@FunctionalInterface来声明是一个函数式接口。常见的函数式接口:java.lang.Runnable、java.util.Comparator。JDK提供的函数式接口java.util.function包中定义了大量的函数接口,下表列出了这些接口,并对其做一些简单的介绍。...

2022-06-26 11:06:00 303

原创 【java8】Optional的使用

Java8在java.util包中添加了一个新的类Optional。Optional类是一个容器,用于表示可能包含也可能不包含非null值。Optional类提供了许多方法用于处理或,而不是简单的检查空值情况。java.util.Optional类的声明如下注意:该类是一个最终类,不能被继承和扩展。Optional类提供了三个静态方法用于创建Optional类的实例,这三个方法的返回值都是Optional。Optional创建对象的使用:Optional类提供的方法方法说明Opti

2022-06-26 11:01:59 352

原创 【java8】并行流Stream

流在处理数据进行一些迭代操作的时候确认很方便,但是在执行一些耗时或是占用资源很高的任务时候,串行化的流无法带来速度/性能上的提升,并不能满足我们的需要。通常我们会使用多线程来并行或是分片分解执行任务,而在Stream中也提供了这样的并行方法,下面将会一一介绍这些方法。使用parallelStream()方法或者是使用stream().parallel()来转化为并行流。但是只是可能会返回一个并行的流,流是否能并行执行还受到其他一些条件的约束(如是否有序,是否支持并行)。对顺序流调用parallel方法并不意

2022-06-26 10:48:14 1594

原创 【java8】Stream流

Stream是从某个数据源获得的支持聚合操作的元素序列。名词解释:Java8在推出流的同时,对集合框架也进行了一些比较大变更。主要是在Collection接口上提供了两种生成Stream的方法:流的使用一般包括三件事:迭代流的每个元素。sorted对流中元素进行排序。filter过滤元素。distinct去除重复元素。limit限制返回元素个数。skip跳过前面的元素个数,与limit联合使用可以实现类似sql的分页功能。map可以将流转换成另外一个元素的流。flatMap流的扁

2022-06-26 10:09:31 303

原创 【java8】lambda表达式简介

Lambda表达式类似匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和方法名。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。参数说明:举例说明:Lambda表达式作用域lambda表达式中可以引用任何外部的变量或者常量。但是对这些外部的变量是有要求的:它们必须是Effectively final的。局部内部类和匿名内部类访问的局部变量必须由final修饰,java8开始,可以不加final修饰符,由系统默认添加。java将这个功能称为:Effective

2022-06-25 20:23:37 208

原创 【SpringWebFlux】WebFlux入门

WebFlux内部使用的是响应式编程(Reactive Programming),以Reactor库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。WebFlux使用的技术栈:webflux依赖会自动引入projectreactor依赖;r2dbc依赖类似于jdbc。配置文件application.properties数据源的配置格式采用固定的。实体类中使用JPA的注解指定表名和主键字段。DAO层DAO接口组要继承ReactiveCrudRepo

2022-06-19 10:00:00 294

原创 【SpringWebFlux】Project Reactor的使用

Spring Framework从版本5开始,基于Project Reactor支持响应式编程。Project Reactor是用于在JVM上构建非阻塞应用程序的Reactive库,基于Reactive Streams规范。Project Reactor是Spring生态系统中响应式的基础,并且与Spring密切合作进行开发。Spring WebFlux要求Project Reactor作为核心依赖项。Project Reactor主要由下面的模块组成:要想在应用程序中使用Project Reactor,需

2022-06-18 22:00:00 609

老K说中台_技术领导力_老K(全网200w+阅读量文章合集).pdf

老K说中台_技术领导力_老K(全网200w+阅读量文章合集)

2021-02-26

安全认证框架-Apache_Shiro研究心得

安全认证框架-Apache_Shiro研究心得

2015-03-06

Apache_Shiro_使用手册(一)Shiro架构介绍

Apache_Shiro_使用手册(一)Shiro架构介绍

2015-03-06

Apache_Shiro_使用手册(四)Realm_实现

Apache_Shiro_使用手册(四)Realm_实现

2015-03-06

Apache_Shiro中文帮助文档

Apache_Shiro中文帮助文档

2015-03-06

使用jackson完成json与java对象的互相转换实例

使用jackson完成json与java对象的互相转换实例

2015-02-01

java map实例,排序

java map排序,hashmap,linkedmap,treemap,hashtable

2015-01-31

对Map的key和value进行排序

对Map的key和value进行排序

2015-01-31

HashMap,HashTable,LinkedHashMap,TreeMap的区别

HashMap,HashTable,LinkedHashMap,TreeMap的区别

2015-01-31

java操作json实例

java操作json实例,java对象与json对象的互相转换

2015-01-27

json-lib.jar

json-lib.jar java 操作json的jar包

2015-01-27

js操作json

js操作json

2015-01-27

java利用json-lib操作json

java利用json-lib操作json

2015-01-27

java对properties配置文件的读和写

java对properties配置文件的读和写

2015-01-27

bootstrap日期插件datetimepicker的使用

bootstrap日期插件datetimepicker的使用

2015-01-26

jpa对表的crud操作

jpa对表的crud操作

2015-01-16

jpa查询详解

jpa查询 jpql 本地查询 命名查询

2015-01-16

Spring集成Hessian案例

Spring集成Hessian案例

2014-12-29

Hessian入门案例源代码

Hessian入门案例源代码

2014-12-29

mybatis入门案例

mybatis入门案例 内附详细教程 jar包

2014-12-23

mybatis中文教程

mybatis中文教程

2014-12-23

mybatis-3.2.7

mybatis-3.2.7

2014-12-23

spring与hibernate的整合

spring与hibernate的整合 spring事务的配置

2014-11-07

Hibernate的配置

hibernate.cfg.xml的配置

2014-11-05

调用QQ webservice查看QQ在线状态源代码

调用QQ webservice查看QQ在线状态 java源代码

2014-11-03

调用QQ webservice查看QQ在线状态

调用QQ webservice查看QQ在线状态

2014-11-03

spring入门案例

spring开发入门案例,非常适合初学者,注释很详细

2014-11-03

spring简介

spring简介,aop,ioc,spring入门

2014-11-03

hibernate入门案例

hibernate入门案例,使用orm实现代码生成数据库中的表

2014-11-03

hibernate简介

hibernate简介,hibernate能干什么,为什么要用hibernate,怎么使用

2014-11-03

空空如也

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

TA关注的人

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