明洋的专栏

好记性不如烂笔头,内存虽快,但不持久
私信 关注
随风yy
码龄9年
  • 2,835,752
    被访问量
  • 573
    原创文章
  • 806
    作者排名
  • 649
    粉丝数量
  • 于 2012-05-22 加入CSDN
获得成就
  • 获得599次点赞
  • 内容获得381次评论
  • 获得1,647次收藏
荣誉勋章
兴趣领域
  • #后端
    #Spring#MySQL#分布式#Spring Boot#Java#Linux#Redis#架构
TA的专栏
  • 【死磕spring源码】
    58篇
  • 【springboot quartz】
    2篇
  • 【RabbitMQ】
    42篇
  • 【docker】
    8篇
  • 【Java】
    126篇
  • 【Java工具类】
    60篇
  • 【spring MVC】
    62篇
  • 【Spring Security】
    17篇
  • 【MongoDB/Redis】
    61篇
  • 【linux/mac/windows】
    31篇
  • 【jackson】
    2篇
  • 【zeromq】
    1篇
  • 【JVM】
    6篇
  • 【Play】
    27篇
  • 【Git/Maven】
    40篇
  • 【IDE】
    11篇
  • 【Lua】
    1篇
  • 【前端】
    28篇
  • 【tomcat】
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Connection prematurely closed BEFORE response reactor.netty.http.client.PrematureCloseException: Co

一、最近在开发网关系统,就在感觉万事大吉可以上线的时候发现了如下的错误(这个是我在配置rabbitmq访问多个服务时发现的) Connection prematurely closed BEFORE responsereactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE responsereactor.core.publisher.FluxOnAssembly$OnAssemblyE
原创
14阅读
0评论
0点赞
发布博客于 2 天前

死磕源码系列【springcloud gateway网关缓存请求body及删除缓存body之AdaptCachedBodyGlobalFilter和RemoveCachedBodyFilter过滤器】

RemoveCachedBodyFilter和AdaptCachedBodyGlobalFilter是两个全局过滤器,在网关过滤器链中RemoveCachedBodyFilter优先级最高,AdaptCachedBodyGlobalFilter次之,所以每次请求发送过来先将网关上线文中的请求body删除,然后再从请求中获取body缓存到网关上线文,属性是CACHED_REQUEST_BODY_ATTR(cachedRequestBody),这样就可以直接从网关上下文中拿到请求参数,而不会出现从reques.
原创
208阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【consul配置中心监视器类ConfigWatch动态刷新配置】

consul作为配置中心时可以开启动态刷新配置的功能,其实现类是通过ConfigWatch来实现;监视器类相关属性配置spring: cloud: consul: config: watch: # 是否开启配置中心配置变动,默认:true enabled: true # 监控的固定延迟值,即一次执行完成到下一次执行开始之间的间隔,默认:1000毫秒 delay: 1000 .
原创
64阅读
1评论
0点赞
发布博客于 2 月前

NettyWebServer开启http端口并实现http自动跳转https

1.定义配置文件类package com.emily.cloud.gateway.config;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.web.server.Shutdown;/** * @program: EmilyGateway * @description: Netty服务器配置 * @create: 2021/
原创
95阅读
0评论
0点赞
发布博客于 2 月前

springboot2.4开启HTTPS功能报DerInputStream.getLength(): lengthTag=111, too big异常

1.生成证书keytool -genkey -alias emily -keypass 123456 -keyalg RSA -keysize 1024 -validity 3650 -keystore D:\emily.p12 -deststoretype pkcs12 -storepass 1234562.将emily.p12证书放到项目resources目录下,在yml配置文件中添加配置server: port: 443 # 优雅停机 shutdown: graceful ss
原创
259阅读
0评论
0点赞
发布博客于 2 月前

Springboot2.0--WebMvcConfigurer详解

WebMvcConfigurer是spring内部配置的一种方式,使用JavaBean的方式代替传统的xml配置;也可以自定义扩展配置类,实现方式是继承WebMvcConfigurer接口;WebMvcConfigurer其实就是一个接口,具体的配置是由实现类来决定的,现在会有两个问题,具体的实现类有哪些?这些实现类是如何加载到容器之中并生效的?带着这两个问题开启我们源码的探索之旅。WebMvcConfigurer具体实现类1.系统自带实现类WebMvcAutoConfigurationAda.
原创
1593阅读
0评论
2点赞
发布博客于 8 月前

linux查看内核数量命令

top命令+1先按下top命令: top - 17:00:18 up 776 days, 23:26, 5 users, load average: 0.19, 0.29, 0.18Tasks: 409 total, 1 running, 408 sleeping, 0 stopped, 0 zombieCpu(s): 1.4%us, 0.7%sy, 0.0...
原创
13740阅读
0评论
3点赞
发布博客于 3 年前

mac版eclipse记不住默认工作空间

第一:找到eclipse的配置文件config.ini的位置第二步:修改配置文件第三步:重启eclipse就可以了
原创
1158阅读
0评论
0点赞
发布博客于 4 年前

log4j日志配置文件及将日志根据不同的等级输入到不同的文件之中

1.日志的等级DEBUG 2.log4j.properties配置文件详情log4j.rootLogger=info,stdout,info,debug,error  log4j.appender.stdout=org.apache.log4j.ConsoleAppender  log4j.appender.stdout.layout=org.apache.log4j.Patter
原创
701阅读
0评论
0点赞
发布博客于 4 年前

Java-WebSocket启动服务报“WebsocketSelector23”空指针异常

今天在做websocket的时候遇到报空指针异常,在网上也没有找到对应错误的解决方法,最后更改了一下端口号居然OK了,所以推测是端口号被占用了,经过查询还真是被公司产品的测试环境占用了端口,关闭端口问题立马就解决了(查询端口是否被占用的方法:https://blog.csdn.net/yaomingyang/article/details/80135582),所以分享出来给遇到同样错误(报错提示跟...
原创
816阅读
0评论
0点赞
发布博客于 3 年前

requirejs如何使用define定义一个模块

AMD规范全称是Asynchronous Module Definition,即异步模块加载机制。从它的规范描述页面看,AMD很短也很简单,但它却完整描述了模块的定义,依赖关系,引用关系以及加载机制。require定义一个模块是通过 define function (name, deps, callback)完成的,第一个参数是定义模块名,第二个参数是传入定义模块所需要的依赖,第三个函数则是...
原创
10476阅读
0评论
3点赞
发布博客于 3 年前

(六)java.io.ObjectStreamConstants接口详解

简介:写入对象序列化流中的常量;1.final static short STREAM_MAGIC = (short)0xaced;分析:写入流头的魔法数字;2.final static short STREAM_VERSION = 5;分析:写入流标头的版本号;3.final static byte TC_BASE = 0x70;分析:第一个标签值;4.final s...
原创
412阅读
0评论
0点赞
发布博客于 3 年前

(二十七)Java组件类Triple、MutableTriple、ImmutableTriple存储三个对象类详解

组件类是在包org.apache.commons.lang3.tuple下;1.Triple抽象类,实现这个抽象类的类能够存储三个对象package org.apache.commons.lang3.tuple;import java.io.Serializable;import java.util.Objects;import org.apache.commons.lan...
原创
8810阅读
0评论
0点赞
发布博客于 3 年前

Docker学习笔记:docker重新进入容器时“/etc/profile”中环境变零失效问题解决

在docker容器中的/etc/profile配置了环境变量,容器未重新启动是可以正常使用的,但是一旦重启就失效了,解决办法是在/root/.bashrc文件最下面添加如下指令:source /etc/profile保存文件,然后执行:source /root/.bashrc这样再重启docker容器环境变量就不会丢失了。也可以直接在/root/.bashrc配置文件中配置环境变量。...
原创
397阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ学习笔记:4369、5672、15672、25672默认端口号修改

1.默认5672端口号修改第一种方法:在/etc/rabbitmq/rabbitmq.conf配置文件中加上如下配置:listeners.tcp.default = 5673或者[ {rabbit, [ {tcp_listeners, [5673]} ] }]上面的示例将更改RabbitMQ监听AMQP0-9-1和AMQP 1.0协议客户端的连接端口从...
原创
12199阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ学习笔记:消息优先级(priority)

概括RabbitMQ在版本3.5.0中有优先级队列的实现,任何队列可以通过设置可选参数x-max-priority转换为优先级队列;这个参数应该是1到255之间的正整数,推荐设置1到10之间的数值,表示队列应该支持的最大优先级;声明优先级队列Channel ch = ...;Map<String, Object> args = new HashMap<String, ...
原创
507阅读
0评论
0点赞
发布博客于 2 年前

RabbitMQ基本使用详解及示例

RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务端用Erlang语言...
原创
603阅读
0评论
0点赞
发布博客于 2 年前

RestTemplate处理返回状态码非200及设置超时时间

默认情况下使用RestTemplate如果返回结果的状态码是200的话就正常处理,否则都会抛出异常;1.调试postForEntity请求的方法找到判断响应结果状态码的方法是org.springframework.web.client.DefaultResponseErrorHandler类中的hasError方法 @Override public boolean hasError(Clie...
原创
3344阅读
0评论
1点赞
发布博客于 2 年前

RabbitMQ学习笔记:内存(Memory)|磁盘空间(Disk space)阀值

相关文档指南: https://rabbitmq.com/memory.html支持的单位符号## k, kiB: kibibytes (2^10 - 1,024 bytes)## M, MiB: mebibytes (2^20 - 1,048,576 bytes)## G, GiB: gibibytes (2^30 - 1,073,741,824 bytes)## kB: kilo...
原创
4820阅读
1评论
0点赞
发布博客于 2 年前

RabbitMQ学习笔记:addReturnListener监听回退消息

发布消息示例channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, true, false, properties.build(), message.getBytes());参数:mandatory:如果为true, 消息不能路由到指定的队列时,则会调用basic.return方法将消息返回给生产者,会触发addReturnListener注册的...
原创
594阅读
0评论
1点赞
发布博客于 2 年前

jackson将JSON字符串转换成复杂的数据类型

private static ObjectMapper objectMapper = new ObjectMapper(); /** * 示例1: * List<Map<Integer, String>> list = Lists.newArrayList(); * Map<Integer, ...
原创
926阅读
0评论
0点赞
发布博客于 2 年前

(五)java.io.ObjectInput接口详解

简介:ObjectInput接口继承了DataInput、AutoCloseable接口包括对象的阅读功能,DataInput接口包括输入原始数据类型的方法,ObjectInput接口扩展接口包括数组、对象、字符串。1.public Object readObject() throws ClassNotFoundException, IOException;分析:读取并返回一个对象,实现此...
原创
1573阅读
0评论
0点赞
发布博客于 3 年前

(八)Java日期工具类DateUtils详解(二)

一、日期格式化public static Date parseDate(String str, Locale locale,String… parsePatterns)说明:使用给定区域设置的默认日期格式符号,通过尝试各种不同的解析器解析一个表示日期的字符串,解析将依次尝试每个解析模式。解析只有在解析整个输入字符串时才被认为是成功的。如果没有解析模式匹配,抛出ParseExceptio
原创
1602阅读
0评论
0点赞
发布博客于 3 年前

Mongodb更新数组$push操作符

一、$push操作符添加指定的值到数组中,$push操作符有如下的格式:{ $push: { : , ... } }指定一个在一个内嵌文档中或者在一个数组中,使用点号分开$push修饰符可以和$each、$slice、$sort、$position修饰符一起使用,当使用这些修饰符的时候$push操作符有如下格式:{ $push: { : { : , ... }, ... } }
原创
22789阅读
0评论
3点赞
发布博客于 4 年前

Java动态代理InvocationHandler和Proxy学习笔记

1.InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法。看下官方文档对InvocationHandler接口的描述: {@code InvocationHandler} is the interface implement...
原创
65570阅读
13评论
71点赞
发布博客于 3 年前

Java对象的序列化(Serialization)和反序列化详解

1.序列化和反序列化序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以是字节或者XML等格式;而字节或者XML格式的可以还原成完全相等的对象,这个相反的过程又称为反序列化;2.Java对象的序列化和反序列化在Java中,我们可以通过多种方式来创建对象,并且只要对象...
原创
69045阅读
27评论
53点赞
发布博客于 3 年前

浅谈java8之@FunctionalInterface注解

1.什么是函数式接口(Functional Interface)函数式接口首先必须是一个接口,接口里面只能有一个抽象方法(允许有默认方法、静态方法等);这种类型的接口也称为SAM接口,即Single Abstract Method Interface。2.函数式的接口创建可以使用Lambda表达式、方法引用或构造函数引用创建函数式接口。如下定义了一个函数式接口:package c...
原创
929阅读
0评论
0点赞
发布博客于 2 年前

死磕源码系列【springboot内嵌tomcat如何启用ServletContextInitializer的onStartup方法进行初始化Servlet\Filiter\EventListener

参考:死磕源码系列springboot之ServletContextInitializerBeans如何将Filter、Servlet、EventListener注册到ServletContext中源码解在springboot的jar包中有一个TomcatStarter类,是ServletContainerInitializer的子类,会对ServletContextInitializer的相关实现类及包装类进行初始化;TomcatStarter源码如下:class TomcatStarter imp
原创
160阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springboot之ServletContextInitializerBeans如何将Filter、Servlet、EventListener注册到ServletContext中源码解

ServletContextInitializerBeans类表示从ListableBeanFactory容器中获取到的ServletContextInitializer实例集合,包括所有的ServletContextInitializer beans,并且也包含Servlet、Filter、EventListener beans集合。这些beans会被排序,按照Servlet->Filter->EventListener->ServletContextInitializer的顺序排列。
原创
111阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springboot之ServletContextInitializer接口源码解析】

springboot提供在Servlet 3.0+环境中用于编码方式配置ServletContext的接口,此接口(ServletContextInitializer)主要被RegistrationBean抽象类实现用于往ServletContext容器中注册Servlet、Filter或者Listener。这些实现了此接口的Bean的生命周期将会交给Spring容器管理,而不会交给Servlet容器。1.ServletContextInitializer接口源码:@FunctionalInterf.
原创
153阅读
1评论
0点赞
发布博客于 2 月前

死磕源码系列【spring之WebApplicationInitializer源码解析】

死磕源码系列【spring之WebApplicationInitializer源码解析】WebApplicationInitializer是在Servlet3.0+环境中实现的接口,以便以编程方式配置ServletContext,而不是传统的基于web.xml方式。SpringServletContainerInitializer的SPI实现将由其自身检测,它本身由任何servlet3.0容器自动引导,有关这种引导机制的详细信息,请参考SpringServletContainerInitializer的
原创
46阅读
1评论
0点赞
发布博客于 2 月前

死磕源码系列【springcloud之RetryConfiguration重试策略源码解析】

RetryConfiguration配置是ConsulAutoConfiguration自动化配置的内部类,其作用是将AopAutoConfiguration、RetryProperties加入到IOC容器之中,并且实例化一个RetryOperationsInterceptor重试拦截器加入到IOC容器之中;1.RetryConfiguration配置类源码 //启用retry重试功能 //AopAutoConfiguration类加入IOC容器 //RetryProperties加入.
原创
83阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springcloud之BootstrapImportSelector将BootstrapConfiguration配置加载到容器源码分析】

在BootstrapApplicationListener监听器中会将BootstrapImportSelectorConfiguration配置类注入到IOC容器,配置类上有一个@Import注解将BootstrapImportSelector类注入容器并获取spring.factories配置中key为org.springframework.cloud.bootstrap.BootstrapConfiguration的配置组件;@Configuration(proxyBeanMethods = fal
原创
177阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springcloud之BootstrapApplicationListener初始化bootstrap上下文及bootstrap.properties配置文件源码解析】

BootstrapApplicationListener是ApplicationListener监听器接口的子类,其主要作用是初始化parent上下文、bootstrap.properties配置文件及应用程序上下文设置父上下文;BootstrapApplicationListener监听器源码public class BootstrapApplicationListener implements ApplicationListener<ApplicationEnvironmentPrep.
原创
101阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springcloud之@EnableDiscoveryClient More than one implementation及加不加@EnableDiscoveryClient注解都可

最近做consul作为注册中心主方法main上添加与不添加@EnableDiscoveryClient启用服务发现注解都可以正常的使用服务发现及注册功能,这点上有些疑惑,所以就扒拉扒拉源码,看看实现原理到底是什么;1.看下注解@EnableDiscoveryClient源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import(EnableDiscoveryClientImp
原创
109阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【springboot之内部类解析processMemberClasses源码分析】

在将配置类解析为ConfigurationClass配置类时经常会遇到内部配置类的情况,遇到这种情况是如何解析的呢?本文对这一块进行一一解释;ConfigurationClassParser#processMemberClasses方法解析内部类//注册配置类成员嵌套类private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass, Predicate<String>
原创
76阅读
0评论
0点赞
发布博客于 2 月前

死磕源码系列【spring之MetadataReaderFactory工厂方法源码解析】

MetadataReader是用于访问类的元数据的门面模式读取器类,其实通过MetadataReaderFactory工厂方法获取,允许为每个原始资源缓存元数据读取器;public interface MetadataReaderFactory { /** * 根据类名获取MetadataReader对象 */ MetadataReader getMetadataReader(String className) throws IOException; /** * 通过给定的Resou
原创
182阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之ConditionEvaluator#shouldSkip条件注解评估类判定是否应该跳过指定注解】

条件判定接口org.springframework.context.annotation.Condition是一个函数是接口,只有一个matchs方法用来判定是否符合指定的条件,结合@Conditional注解一起使用@FunctionalInterfacepublic interface Condition { /** * 判定条件是否匹配 * @param context 条件上下文 * @param metadata 类或者方法的元数据对象 */ boolean matche
原创
146阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之AutoConfigurationImportSelector#getExclusionFilter过滤器方法使用源码分析】

AutoConfigurationImportSelector类是通过@EnableAutoConfiguration注解引入的,主要作用就是将自动化配置类加载到内存之中,除了这些还有一个强大的功能就是过滤掉不符合条件注解配置类;其中自动化配置类的过滤原理及流程已经分析过了,请参考:死磕源码系列【springboot之OnClassCondition、OnBeanCondition、OnWebApplicationCondition条件注解源码解析】,本文只讲解基于AutoConfigurationImpo
原创
56阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之OnClassCondition、OnBeanCondition、OnWebApplicationCondition条件注解源码解析】

在spring-boot-autoconfigurejar包中的spring.factories配置文件中有一个org.springframework.boot.autoconfigure.AutoConfigurationImportFilter自动化配置import过滤器,配置如下:# Auto Configuration Import Filtersorg.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\org.
原创
283阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之ConditionEvaluationReport记录报告和日志条件评估详情源码解析】

ConditionEvaluationReport用来记录自动化配置过程中条件匹配的详细信息及日志信息;1.ConditionOutcome类输出条件匹配及日志信息public class ConditionOutcome { //是否匹配 private final boolean match; //日志信息 private final ConditionMessage message; }2.Condition函数是接口定义一个class必须匹配给定的条件后才可以定义为BeanDe.
原创
259阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot自动化配置类加载顺序源码详解AutoConfigureBefore、AutoConfigureAfter、AutoConfigureOrder】

springboot的自动化配置类默认的加载及初始化顺序是按照字母顺序来的,当然也可以通过AutoConfigureBefore、AutoConfigureAfter、AutoConfigureOrder三个注解类来控制,下面我们就看一下底层源码是如何实现的;1.查看自动化配置类加载顺序源码AutoConfigurationImportSelector.AutoConfigurationGroup#sortAutoConfigurations //autoConfigurationMetadata.
原创
279阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【AutoConfigurationMetadataLoader之加载自动化配置元数据源码详解】

spring-autoconfigure-metadata.properties配置文件配置JavaConfig自动化配置类注解的元数据信息,这些原数据信息可以帮助springboot提前过滤掉不符合条件的配置类,提高加载启动应用程序的效率。1.AutoConfigurationMetadata接口提供自动化配置类注释处理器元数据的访问public interface AutoConfigurationMetadata { /** * 如果指定的类名由注解处理器处理过,则返回true *.
原创
109阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之@Import注解多个类引入同一个类源码解析】

@Import注解的作用是将一个类注入到IOC容器之中,那么我在同一个程序的多个不同配置类中引入同一个类会不会造成冲突呢?带着这样的疑问我做了几个测试及源码分析。1.新建TestService接口public interface TestService { String getStr(String name);}2.新建TestService接口实现类TestServiceImplpublic class TestServiceImpl implements TestService .
原创
311阅读
2评论
0点赞
发布博客于 3 月前

springcloud值ribbon打印WARN日志You already have RibbonLoadBalancerClient on your classpath. It will be us

在使用springcloud ribbon做客户端负载均衡的时候控制台打印如下日志:You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use
原创
752阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot初始化值InitializingBean、DisposableBean、init-method和@PostConstruct源码解析】

Spring容器中的Bean是有生命周期的,spring允许在bean的初始化完成之后以及Bean的销毁执行之前执行特定的操作,常用的设定方式有以下三种:通过实现InitializingBean和DisposableBean接口来定制初始化之后及销毁之前的操作方法;通过在@Bean注解或元素上的initMethod、destroyMethod属性指定初始化之后及销毁之前调用的操作方法;在指定的方法上加@PostConstruct、@PreDestroy注解来指定该方法在初始化之前及初始化之后调用
原创
91阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot actuator使用相同或不同management.server.port端口ApplicationContext应用程序上下文源码详解】

springboot actuator用于springboot项目健康监控,默认端口和应用程序相同,这时它们使用同一个应用程序上下文及tomcat容器;当management.server.port端口和应用程序不同时,actuator的应用上下文是系统的子上下文,使用独立的tomcat容器,这时如果我想拦截actuator应用程序的端点、管理actuator的容器及bean又该如何下手呢?1.监控的端口相同时正常的拦截器及过滤器都可以拦截到端点的请求,但是当端口不同的时候这些统统失效了,啊啊崩溃,如.
原创
436阅读
1评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之DataObjectBinder、DataObjectBinder源码解析】

DataObjectBinder是一个内部策略被Binder用来绑定数据对象,数据对象是由递归绑定的属性组成的对象;其实现类有JavaBeanBinder、ValueObjectBinder;JavaBeanBinder实现类是通过getter/setter绑定,ValueObjectBinder实现类是通过构造函数绑定;DataObjectBinder接口源码:interface DataObjectBinder { /** * 返回一个绑定的实例,如果DataObjectBinder不支.
原创
270阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之Bindable源码解析】

Bindable是指可由Binder绑定的源(如:基本数据类型,java对象、List、数组等等),也可以理解为可以绑定到指定的属性配置的值。Bindable属性源码public final class Bindable<T> { //默认注解空数组 private static final Annotation[] NO_ANNOTATIONS = {}; //要绑定项的类型 private final ResolvableType type; //要绑定项的包装类型 pr.
原创
224阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【springboot之BindResult源码解析】

BindResult是Binder类返回绑定操作结果的容器对象,可能包含成功绑定的对象或空结果。BindResult属性源码 private static final BindResult<?> UNBOUND = new BindResult<>(null); //绑定结果值 private final T value; //创建有一个BindResult实例对象 private BindResult(T value) { this.value = value;.
原创
180阅读
0评论
0点赞
发布博客于 3 月前

死磕源码系列【DefaultSingletonBeanRegistry共享bean实例注册表源码解析】

DefaultSingletonBeanRegistry类继承SimpleAliasRegistry以及SingletonBeanRegistry接口,处理公用bean的注册、销毁以及依赖关系的注册和销毁。SimpleAliasRegistry类提供了bean别名注册功能,之前已经讲解过,请参考死磕源码系列【JavaConfig配置bean别名AliasRegistry详解】;SingletonBeanRegistry接口为共享bean实例定义注册表的接口,可以通过IOC容器来实现,以便以统一公开的.
原创
80阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【@EnableConfigurationProperties注解及EnableConfigurationPropertiesRegistrar注册器类源码解析】

@EnableConfigurationProperties注解通常和@ConfigurationProperties注解一起使用,将标记了@ConfigurationProperties的bean绑定配置文件中的属性并将其注册到IOC容器之中。首先看下@EnableConfigurationProperties注解的源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EnableCo.
原创
174阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【DelegatingApplicationContextInitializer源码分析】

DelegatingApplicationContextInitializer初始化器实现类是ApplicationContextInitializer接口的一个代理实现类,提供了一个属性key(context.initializer.classes)在配置文件中配置自定义的初始化器实现类;当然,也可以使用SPI方式在spring.factories配置文件配置org.springframework.context.ApplicationContextInitializer作为key来配置,两种方式都可以.
原创
136阅读
0评论
1点赞
发布博客于 4 月前

死磕源码系列【ContextIdApplicationContextInitializer源码解析】

ContextIdApplicationContextInitializer类是ApplicationContextInitializer初始化器接口实现类,会在应用程序启动的时候初始化应用程序的唯一ID。ContextIdApplicationContextInitializer设置Spring ApplicationContext上下文ID,如果spring.application.name属性存在,则将其作为ID,否则使用application默认值作为ID,源码如下:public class.
原创
116阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【ConfigurationWarningsApplicationContextInitializer源码解析】

ConfigurationWarningsApplicationContextInitializer是ApplicationContextInitializer初始化器接口的实现类,用作报告常见错误配置的警告(通过分析源码实际情况是如果系统配置包扫描(@ComponentScan)到了org或者org.springframework包就会发出警告并停止系统启动)ConfigurationWarningsApplicationContextInitializer初始化器源码:public class .
原创
133阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【ServerPortInfoApplicationContextInitializer初始化器源码详解】

ServerPortInfoApplicationContextInitializer是ApplicationContextInitializer接口的实现类,会通过SPI方式在应用程序启动时初始化,其主要作用是在环境Environment中添加一个属性源,将应用的本地端口号添加进去,方便通过@Value或environment获取本地端口号;ServerPortInfoApplicationContextInitializer初始化器还实现了另外一个ApplicationListener监听器,监听器实.
原创
143阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【StandardServletEnvironment源码解析】

spring中的StandardServletEnvironment将由基于servlet的web应用程序使用,所有基于servlet的web相关ApplicationContext类将会初始化一个StandardServletEnvironment实例。通过上面的图标可以清楚StandardServletEnvironment类的继承关系,PropertyResolver接口是用于针对任何基础源解析属性的接口;ConfigurablePropertyResolver接口是PropertyResol.
原创
119阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【SystemEnvironmentPropertySourceEnvironmentPostProcessor、SpringApplicationJsonEnvironmentPostP

SystemEnvironmentPropertySourceEnvironmentPostProcessor类是EnvironmentPostProcessor接口的实现类,用来替换Environment环境中的systemEnvironment,systemEnvironment中最初存储的是SystemEnvironmentPropertySource类,现由实现类OriginAwareSystemEnvironmentPropertySource替换,OriginAwareSystemEnviro.
原创
119阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【PlaceholdersResolver、PropertyPlaceholderHelper配置文件占位符解析源码分析】

springboot配置文件可以使用占位符获取属性,如下示例(可以使用占位符${}获取其它的属性配置,也可以使用":"冒号连接,拿这些底层源码是如何解析的呢?):test.city=上海test.country=中国test.address=${test.city}:${test.country}test.cityadd=${test.city}PlaceholdersResolver接口是Binder用于解析属性占位符的可选策略@FunctionalInterfacepublic inte
原创
101阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【ConfigFileApplicationListener监听器源码解析】

ConfigFileApplicationListener监听器主要用来处理环境配置相关业务,其加载是在springboot启动时通过SPI方式获取(之前的文章已经将结果);ConfigFileApplicationListener监听器类继承SmartApplicationListener接口实现了supportsEventType方法,判定监听器实际上支持的时间类型: @Override public boolean supportsEventType(Class<? extends A.
原创
169阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【PropertySourceLoader加载properties、yml配置文件源码详解】

PropertySourceLoader接口实现类用来在项目启动的时候加载properties、xml、yml配置文件,其实现类一共有两个PropertiesPropertySourceLoader、YamlPropertySourceLoader,分别用来加载 properties文件及yml配置文件;PropertiesPropertySourceLoader、YamlPropertySourceLoader两个实现类是通过springboot SPI机制在ConfigFileApplicatio.
原创
350阅读
2评论
0点赞
发布博客于 4 月前

死磕源码系列【ConfigurationClassUtils工具类详解】

ConfigurationClassUtils类是用于ConfigurationClass配置类的实用程序,是一个抽象类,只可以在框架内部使用;如果bean定义是一个被@Configuration标注的JavaConfig配置类(且proxyBeanMethods为false),则bean定义属性设置为full标记;如果bean定义被@Component、@ComponentScan、@Import、@ImportResource注解标注或者方法被@Bean标注,则bean定义属性设置为lite。如.
原创
185阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【JavaConfig配置bean别名AliasRegistry详解】

AliasRegistry用于管理别名的公共接口,作为BeanDefinitionRegistry的超级接口(主要用作JavaConfig配置bean别名的注册、删除、判定、获取)AliasRegistry接口源码:public interface AliasRegistry { /** * 给定一个名称,给它注册一个别名 * @param 规范的命名 * @param 要注册的别名 * @throws IllegalStateException if the alias is .
原创
108阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【BeanNameGenerator生成bean名称策略接口详解】

本文包括bean name实现类源码详解,及自定义bean name生成策略源码原理详解bean name生成策略三个实现类源码详解BeanNameGenerator接口是BeanDefinition定义生成bean名称的策略接口;public interface BeanNameGenerator { /** * 为给定的BeanDefinition生成一个bean名称 */ String generateBeanName(BeanDefinition definition, .
原创
284阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【springboot主配置源类加载the primary source to load】

通常使用springboot开发是会有一个主方法main方法入口:import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class QuartzBootStrap { public static void main(String[] args) {
原创
191阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【springboot应用参数ApplicationArguments详解】

ApplicationArguments接口提供对用于运行org.springframework.boot.SpringApplication的参数访问,此接口只有一个实现类DefaultApplicationArguments。如下示例(获取应用程序的args参数):@SpringBootApplicationpublic class QuartzBootStrap { public static void main(String[] args) { SpringAppl.
原创
214阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【SpringApplicationRunListener监听器源码及加载过程解析】

springboot提供了两个类SpringApplicationRunListeners、SpringApplicationRunListener(EventPublishingRunListener),spring框架还提供了一个ApplicationListener接口,那么这几个类或接口的关系又是如何呢?首先SpringApplicationRunListeners类是SpringApplicationRunListener接口的代理类,可以批量调用SpringApplicationRunList.
原创
240阅读
1评论
0点赞
发布博客于 4 月前

死磕源码系列【ApplicationEventMulticaster接口及实现类源码解析】

ApplicationEventMulticaster接口的实现类可以管理多个ApplicationListener监听器对象,并且发布事件到监听器;ApplicationEventMulticaster其实是ApplicationEventPublisher发布事件的代理类,通常作为SpringApplicationRunListener接口实现类EventPublishingRunListener的一个属性来使用;类的结构图:ApplicationEventMulticaster接口只有一个直.
原创
203阅读
0评论
0点赞
发布博客于 4 月前

死磕源码系列【ConfigurationCondition、TrackedConditionEvaluator、ConditionEvaluator接口类源码详解】

ConfigurationCondition接口继承自Condition接口,Condition接口只有一个matches方法,用来判定是否符合条件;ConfigurationCondition接口中有一个方法getConfigurationPhase,返回一个枚举值。源码如下:public interface ConfigurationCondition extends Condition { /** * Return the {@link ConfigurationPhase} in w.
原创
122阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【ConfigurationClass类源码分析】

ConfigurationClass类代表一个用户定义的配置(@Configuration)类,包括@Bean注解标注的方法,包括所有在类的父类中定义的方法,用一种扁平化的方式来管理;1.先看下类的源码定义的属性final class ConfigurationClass { //配置类的注解元数据 private final AnnotationMetadata metadata; //配置类的资源对象 private final Resource resource; //bean名称.
原创
116阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【ImportSelector接口原理解析】

ImportSelector接口是spring中导入外部配置的核心接口,根据给定的条件(通常是一个或多个注释属性)判定要导入那个配置类,在spring自动化配置和@EnableXXX中都有它的存在;1.ImportSelector接口源码解析/** * Interface to be implemented by types that determine which @{@link Configuration} * class(es) should be imported based on a .
原创
230阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【ImportBeanDefinitionRegistrar源码详解】

@Configuration配置类通过@Import注解将ImportBeanDefinitionRegistrar接口的实现类添加其它bean到IOC容器中,这样可以方便的修改bean或自定义BeanDefinition;而且此过程是在所有的配置类都已经注册到IOC容器之后才触发;1.ConfigurationClassPostProcessor#processConfigBeanDefinitions方法是spring容器加载bean的入口(省略大部分代码) //扫描指定包下所有bean、加.
原创
324阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【ConfigurationClassPostProcessor类定位、加载、注册、实例化bean到IOC容器原理详解

ConfigurationClassPostProcessor类是BeanFactory的一个后处理器类,因此它的主要功能是参与BeanFactory的构建,这个类实现了BeanDefinitionRegistryPostProcessor接口,有两个核心实现方法postProcessBeanDefinitionRegistry(定位、加载、解析、注册相关注解,如:@Controller、@Service、@Component等注解类到IOC容器之中,自动化配置类的解析、注册)、postProcessBe.
原创
152阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【AutoConfigurationImportFilter自动化配置过滤器详解】

/** * Filter that can be registered in {@code spring.factories} to limit the * auto-configuration classes considered. This interface is designed to allow fast removal * of auto-configuration classes before their bytecode is even read. * <p> * An
原创
234阅读
0评论
1点赞
发布博客于 5 月前

死磕源码系列【BeanDefinition相关接口类详解】

BeanDefinition描述了一个bean实例,它具有属性值、构造函数、参数值和具体实现提供的进一步信息;这只是一个最小的接口:主要目的是允许BeanFactoryPostProcessor来接茬和修改属性值和其他bean元素。1.接口源码public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement { /** * 标准单例作用域的作用域标识 * @see ConfigurableBeanF.
原创
82阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【spring系统初始化器ApplicationContextInitializer】

ApplicationContextInitializer初始化器接口是Spring boot应用上下文(ConfigurableApplicationContext)一个回调接口,会在refresh方法之前调用;通常用于对应用上下文容器进行一些属性初始化的web应用程序中,应用上下文类必须是ConfigurableApplicationContext的子类,springboot中使用的实际是org.springframework.boot.web.servlet.context.AnnotationCo.
原创
50阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【SpringFactoriesLoader定位加载spring.factories文件中的配置】

META-INF/spring.factories文件对我们来说应该是最熟悉的了,如springboot开发自动化配置starter的时候配置类是要配置到这个文件后才能够实现自动的加载类到IOC容器之中;但是文件中的配置类是如何被定位、加载、初始化的呢?今天我们就来聊聊spring.factories文件定位、加载、实例化。1.首先看下spring.factories文件中的配置示例先看下spring-boot-autoconfigure中的部分配置:# Initializersorg.spri.
原创
150阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【@SpringBootConfiguration注解详解】

@SpringBootConfiguration注解是@SpringBootApplication组合注解中的一员,今天就来重点了解下这个注解的作用。1.首先看下注解源码/* * Copyright 2012-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in .
原创
124阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【org.springframework.beans.factory.Aware】

使用spring及springboot做开发及看源码的时候经常会看到很多Aware类,如EnvironmentAware、ApplicationContextAware等等,那么这些类又是些什么类呢?接下来我们就来分析;1.首先看下Aware接口源码/** * A marker superinterface indicating that a bean is eligible to be notified by the * Spring container of a particular fra.
原创
117阅读
0评论
0点赞
发布博客于 5 月前

【死磕源码系列】BeanDefinitionRegistryPostProcessor作用及源码分析

BeanDefinitionRegistryPostProcessor接口实现了BeanFactoryPostProcessor接口,BeanFactoryPostProcessor接口的作用是在bean已经注册完成为BeanDefinition,但是还未实例化之前修改BeanDefinition属性;BeanDefinitionRegistryPostProcessor接口提供了一个通过代码形式来注册bean到IOC容器的钩子方法;1.先看下源码/** * Extension to the st.
原创
69阅读
0评论
0点赞
发布博客于 5 月前

死磕源码系列【springboot项目打印is not eligible for getting processed by all BeanPostProcessors (for example: n

标题上打印的日志是info级别的,不影响程序正常使用,但是有代码洁癖的我还是看着不爽,总想找出问题所在,查了很久知道了是IOC容器注册Bean的时候使用到了还未注册到IOC容器中的Bean,也就是某一些Bean需要提前初始化的原因,后置处理器处理的时候打印了一条日志信息,那有没有解决方案呢?网上搜了一堆堆的都是说打印日志的原因,而没有提供一个有效的解决方案,经过几天巴拉巴拉的翻源码终于找到了两种解决方案,那就看看我们一步步的分析吧(不想看源码分析只想看解决方案的直接拉到最后)。1.基础知识BeanFa.
原创
293阅读
0评论
0点赞
发布博客于 5 月前

springboot quartz任务信息持久化storeDurably详解

在将JobDetails信息持久化到数据库的时候有一个属性storeDurably,如果设置为true则无论与其关联的Trigger是否存在其都会一直存在,否则只要相关联的trigger删除掉了其会自动删除掉;1.看下源码注解 /** * Whether or not the <code>Job</code> should remain stored after it is * orphaned (no <code>{@link Trigger
原创
434阅读
0评论
0点赞
发布博客于 6 月前

springboot rabbitmq属性配置spring.rabbitmq.publisher-confirm和spring.rabbitmq.publisher-confirm-type详解

在springboot2.2.0.RELEASE版本之前是amqp正式支持的属性,用来配置消息发送到交换器之后是否触发回调方法,在2.2.0及之后该属性过期使用spring.rabbitmq.publisher-confirm-type属性配置代替,用来配置更多的确认类型;1.spring.rabbitmq.publisher-confirm发布确认属性配置如果该属性为true,则会触发以下方法: /** * 设置生产者消息publish-confirm回调函数 .
原创
3273阅读
1评论
6点赞
发布博客于 6 月前

springboot2.x+quartz+mysql持久化集成

1.pom文件中引入相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupI
原创
209阅读
0评论
0点赞
发布博客于 6 月前

springboot通过HttpServletRequestWrapper获取所有请求参数

springboot通过拦截器获取参数有两种方式,一种通过request.getParameter获取Get方式传递的参数,另外一种是通过request.getInputStream或reques.getReader获取通过POST/PUT/DELETE/PATCH传递的参数;1.拦截器获取参数有哪些方式@PathVariable注解是REST风格url获取参数的方式,只能用在GET请求类型,通过getParameter获取参数@RequestParam注解支持GET和POST/PUT/DELE.
原创
1129阅读
0评论
1点赞
发布博客于 6 月前

springboot注解@Configuration属性proxyBeanMethods详解

proxyBeanMethods属性默认值是true,也就是说该配置类会被代理(CGLIB),在同一个配置文件中调用其它被@Bean注解标注的方法获取对象时会直接从IOC容器之中获取;1.看下源码注解 /** * Specify whether {@code @Bean} methods should get proxied in order to enforce * bean lifecycle behavior, e.g. to return shared singleton bean .
原创
4674阅读
6评论
4点赞
发布博客于 6 月前

springboot通过AsyncConfigurer接口实现异步线程池自动化配置组件

springboot提供了org.springframework.scheduling.annotation.AsyncConfigurer接口让开发人员可以自定义线程池执行器;框架默认提供了一个空的实现类AsyncConfigurerSupport,不过两个方法体内部提供的都是空实现;1.首先看下AsyncConfigurer接口public interface AsyncConfigurer { /** * 方法返回一个实际执行线程的线程池 */ @Nullable defaul.
原创
1542阅读
3评论
1点赞
发布博客于 6 月前

git合并指定分支上的文件到当前分支

1.切换到当前分支(即:要合并文件到的分支)git checkout current_branch2.合并指定分支上的文件到当前分支git checkout --patch zhiding_branch f.txt合并zhiding_branch分支上的f.txt文件到current_branchGitHub地址:https://github.com/mingyang66/spring-parent/tree/master/doc/git...
原创
599阅读
0评论
0点赞
发布博客于 7 月前

Centos7解决service: command not found

1.输入如下命令yum list | grep initscripts会出现如下视图:sh-4.2# yum list | grep initscriptsinitscripts.x86_64 9.49.49-1.el7 base 2.使用yum安装initscriptsyum install initscripts -y
原创
290阅读
1评论
0点赞
发布博客于 7 月前

Docker安装centos7报Unit firewalld.service could not be found.异常

1.下载安装firewall-cmdyum install firewalld systemd -y2.查看服务器上是否安装了firewallsystemctl status firewalld3.开启防火墙systemctl start firewalld.service4.关闭防火墙systemctl stop firewalld.service5.设置开机启动systemctl enable firewalld.service6.设置关闭开机启动systemctl di
原创
1433阅读
0评论
0点赞
发布博客于 7 月前

Git分支重命名

1.本地分支重命名git branch -m oldName newName2.将重命名后的分支推送到远程分支git push origin newName3.删除远程的旧分支git push --delete origin oldNameGitHub地址:https://github.com/mingyang66/spring-parent/tree/master/doc/git...
原创
149阅读
0评论
0点赞
发布博客于 7 月前

RabbitMQ学习笔记:集群和网络分区(Network Partitions)

集群成员之间的网络连接故障会影响客户机操作的数据一致性和可用性(如CAP定理)。由于不同的应用程序对一致性有不同的要求,并且对不可用性的容忍程度不同,所以可以使用不同的的分区处理策略。1.检测网络分区如果一个节点在一段时间内(默认是60秒)无法与对等端节点联系,则节点将认为其对等节点是否已关闭。如果两个节点重新接触,都认为另一个已关闭,则这些节点将确定已发生分区。将以如下形式记录到RabbitMQ日志:2020-05-18 06:55:37.324 [error] <0.341.0> .
原创
568阅读
0评论
0点赞
发布博客于 7 月前

Git误删分支找回

1.首先查看提交的记录git log -g2.查找被误删分支上最后提交的commit ID,跟回commit ID新建分支并将代码复制到新分支上git branch new_branch commit-id通过上面简单的两步就可以找回被误删除的分支GitHub地址:https://github.com/mingyang66/spring-parent/tree/master/doc/git1.首先查看提交的记录git log -g2.查找被误删分支上最后提交的commit ID,跟回
原创
402阅读
0评论
0点赞
发布博客于 8 月前

RequestMappingHandlerMapping源码解析

RequestMappingHandlerMapping的作用是在容器启动后将系统中所有控制器方法的请求条件(RequestMappingInfo)和控制器方法(HandlerMethod)的对应关系注册到RequestMappingHandlerMapping Bean的内存中,待接口请求系统的时候根据请求条件和内存中存储的系统接口信息比对,再执行对应的控制器方法。1.首先分析下HandlerMethod(控制器方法包装对象)public class HandlerMethod { //bean.
原创
221阅读
0评论
1点赞
发布博客于 8 月前

HandlerAdapter接口源码解析

HandlerAdapter是一个适配器接口类,适配器模式是指两个不兼容接口之间的桥梁,要想让一个接口使用另外一个接口的实现中间可以加一层适配器类;举个例子:笔记本没有网线接口,那我想连接网线接通网络如何实现呢?我可以买一个以太网转换器,网线插入转换器上,转换器插入笔记本上就实现了连接网络的功能,那这个转换器起到的就是一个适配器的作用;在接口访问控制器方法的时候是通过HandlerAdapter接口的实现类来进行的,本文以最常用的RequestMappingHandlerAdapter适配器类为主线索来.
原创
150阅读
0评论
0点赞
发布博客于 8 月前

HandlerMapping接口源码解析

实现HandlerMapping接口的类用来定义request请求和handler object之间的映射关系;request请求可以理解为路由url、RequestMappingInfo,handler object理解为控制器类;RequestMappingHandlerMapping类就是实现此接口并将容器中所有的控制器的RequestMappingInfo请求和HandlerMethod注册到内存之中,方便真实的请求发送过来调用具体的控制器方法;本文将以RequestMappingHandlerM.
原创
150阅读
0评论
0点赞
发布博客于 8 月前

HandlerMethod类源码解析

HandlerMethod类用于封装控制器方法信息,包含类信息、方法Method对象、参数、注解等信息,具体的接口请求是可以根据封装的信息调用具体的方法来执行业务逻辑;HandlerMethod有三个子类分别是InvocableHandlerMethod、ServletInvocableHandlerMethod、ConcurrentResultHandlerMethod,类的关系图如下:1.HandlerMethod类源码详解public class HandlerMethod { //be.
原创
264阅读
0评论
1点赞
发布博客于 8 月前

RabbitMQ学习笔记:mandatory、publisher-confirms、publisher-return属性区别

rabbitmq客户端发送消息首先发送的交换器exchange,然后通过路由键routingKey和bindingKey比较判定需要将消息发送到那个队列queue上;在这个过程有两个地方消息可能丢失,第一消息发送到交换器exchange的过程,第二消息从交换器exchange发送到队列queue的过程;1.publiser-confirm模式可以确保生产者到交换器exchange消息有没有发送成功#设置此属性配置可以确保消息成功发送到交换器spring.rabbitmq.publisher-con.
原创
1715阅读
9评论
4点赞
发布博客于 8 月前

springboot2.3.0 javax.validation.constraints.NotBlank找不到异常

原因是2.3.0的spring-boot-starter-web没有引入validation对应的包查看2.3.0以前的版本,以2.2.7版本为例spring-boot-starter-web-2.2.7.RELEASE.pom: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validati.
原创
4335阅读
3评论
14点赞
发布博客于 9 月前

Java8新特性函数式接口Function|Predicate|Consumer

名称类型描述FunctionFunction<T, R>接收T对象,返回R对象PredicatePredicate接收T对象,返回booleanConsumerConsumer接收T对象,无返回值java.util.function.Function接口该函数的主要作用是根据输入的参数对象做一些额外的判定、计算处理,返回另外一个指定的对象R1.源码解析package java.util.function;import j...
原创
321阅读
0评论
0点赞
发布博客于 9 月前