自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

明洋的专栏

好记性不如烂笔头,内存虽快,但不持久

  • 博客(575)
  • 资源 (4)
  • 论坛 (4)
  • 问答 (1)
  • 收藏
  • 关注

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

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

2020-07-13 15:13:41 477

原创 RabbitMQ学习笔记:一篇搞定RabbitMQ延迟队列(DLX、TTL及rabbitmq_delayed_message_exchange插件)

延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。延迟消息使用的场景有很多,比如:在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行异常处理,这时候就可以使用延迟队列来处理这些订单了。用户希望通过手机远程遥控家里的智能设备在指定...

2020-01-03 13:51:01 1395 9

原创 RabbitMQ学习笔记:CentOS7中安装RabbitMQ集群

安装rabbitmq的前提是 在CentOS7中,如果是在docker中安装,需要先创建镜像docker pull centos:7创建CentOS7服务器centos7docker run -itd --hostname rabbit1 --name centos7 -p 15672:15672 -p 5672:5672 -p 4369:4369 -p 25672:25672 cen...

2019-11-28 19:28:02 791

原创 RabbitMQ学习笔记:使用Docker部署RabbitMQ集群

RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式、高并发的特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天生支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过Zookeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞...

2019-11-05 19:18:58 631

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

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

2021-01-15 19:44:33 44

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

consul作为配置中心时可以开启动态刷新配置的功能,其实现类是通过ConfigWatch来实现;监视器类相关属性配置spring: cloud: consul: config: watch: # 是否开启配置中心配置变动,默认:true enabled: true # 监控的固定延迟值,即一次执行完成到下一次执行开始之间的间隔,默认:1000毫秒 delay: 1000 .

2021-01-15 18:23:51 21 1

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

2021-01-15 18:22:50 29

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

2021-01-15 18:21:34 101

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

参考:死磕源码系列springboot之ServletContextInitializerBeans如何将Filter、Servlet、EventListener注册到ServletContext中源码解在springboot的jar包中有一个TomcatStarter类,是ServletContainerInitializer的子类,会对ServletContextInitializer的相关实现类及包装类进行初始化;TomcatStarter源码如下:class TomcatStarter imp

2020-12-15 19:13:25 102

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

ServletContextInitializerBeans类表示从ListableBeanFactory容器中获取到的ServletContextInitializer实例集合,包括所有的ServletContextInitializer beans,并且也包含Servlet、Filter、EventListener beans集合。这些beans会被排序,按照Servlet->Filter->EventListener->ServletContextInitializer的顺序排列。

2020-12-12 13:06:52 77

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

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

2020-12-10 19:35:30 80 1

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

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

2020-12-10 19:34:33 34 1

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

RetryConfiguration配置是ConsulAutoConfiguration自动化配置的内部类,其作用是将AopAutoConfiguration、RetryProperties加入到IOC容器之中,并且实例化一个RetryOperationsInterceptor重试拦截器加入到IOC容器之中;1.RetryConfiguration配置类源码 //启用retry重试功能 //AopAutoConfiguration类加入IOC容器 //RetryProperties加入.

2020-12-08 18:25:44 51

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

在BootstrapApplicationListener监听器中会将BootstrapImportSelectorConfiguration配置类注入到IOC容器,配置类上有一个@Import注解将BootstrapImportSelector类注入容器并获取spring.factories配置中key为org.springframework.cloud.bootstrap.BootstrapConfiguration的配置组件;@Configuration(proxyBeanMethods = fal

2020-12-08 18:24:55 69

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

BootstrapApplicationListener是ApplicationListener监听器接口的子类,其主要作用是初始化parent上下文、bootstrap.properties配置文件及应用程序上下文设置父上下文;BootstrapApplicationListener监听器源码public class BootstrapApplicationListener implements ApplicationListener<ApplicationEnvironmentPrep.

2020-12-08 18:23:44 62

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

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

2020-12-08 18:22:38 67

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

在将配置类解析为ConfigurationClass配置类时经常会遇到内部配置类的情况,遇到这种情况是如何解析的呢?本文对这一块进行一一解释;ConfigurationClassParser#processMemberClasses方法解析内部类//注册配置类成员嵌套类private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass, Predicate<String>

2020-12-08 18:21:08 41

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

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

2020-12-04 19:29:14 132

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

条件判定接口org.springframework.context.annotation.Condition是一个函数是接口,只有一个matchs方法用来判定是否符合指定的条件,结合@Conditional注解一起使用@FunctionalInterfacepublic interface Condition { /** * 判定条件是否匹配 * @param context 条件上下文 * @param metadata 类或者方法的元数据对象 */ boolean matche

2020-12-04 19:28:25 122

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

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

2020-12-04 19:27:18 26

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

在spring-boot-autoconfigurejar包中的spring.factories配置文件中有一个org.springframework.boot.autoconfigure.AutoConfigurationImportFilter自动化配置import过滤器,配置如下:# Auto Configuration Import Filtersorg.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\org.

2020-12-03 19:29:48 174

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

ConditionEvaluationReport用来记录自动化配置过程中条件匹配的详细信息及日志信息;1.ConditionOutcome类输出条件匹配及日志信息public class ConditionOutcome { //是否匹配 private final boolean match; //日志信息 private final ConditionMessage message; }2.Condition函数是接口定义一个class必须匹配给定的条件后才可以定义为BeanDe.

2020-12-03 19:28:32 198

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

springboot的自动化配置类默认的加载及初始化顺序是按照字母顺序来的,当然也可以通过AutoConfigureBefore、AutoConfigureAfter、AutoConfigureOrder三个注解类来控制,下面我们就看一下底层源码是如何实现的;1.查看自动化配置类加载顺序源码AutoConfigurationImportSelector.AutoConfigurationGroup#sortAutoConfigurations //autoConfigurationMetadata.

2020-12-01 19:27:10 200

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

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

2020-12-01 19:25:41 84

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

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

2020-11-28 13:57:49 224 2

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

2020-11-28 13:17:27 422

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

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

2020-11-28 13:15:45 72

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

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

2020-11-24 19:11:34 234

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

DataObjectBinder是一个内部策略被Binder用来绑定数据对象,数据对象是由递归绑定的属性组成的对象;其实现类有JavaBeanBinder、ValueObjectBinder;JavaBeanBinder实现类是通过getter/setter绑定,ValueObjectBinder实现类是通过构造函数绑定;DataObjectBinder接口源码:interface DataObjectBinder { /** * 返回一个绑定的实例,如果DataObjectBinder不支.

2020-11-10 18:10:19 222

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

Bindable是指可由Binder绑定的源(如:基本数据类型,java对象、List、数组等等),也可以理解为可以绑定到指定的属性配置的值。Bindable属性源码public final class Bindable<T> { //默认注解空数组 private static final Annotation[] NO_ANNOTATIONS = {}; //要绑定项的类型 private final ResolvableType type; //要绑定项的包装类型 pr.

2020-11-06 19:23:29 202

原创 死磕源码系列【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;.

2020-11-06 19:22:01 141

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

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

2020-11-05 19:52:02 70

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

@EnableConfigurationProperties注解通常和@ConfigurationProperties注解一起使用,将标记了@ConfigurationProperties的bean绑定配置文件中的属性并将其注册到IOC容器之中。首先看下@EnableConfigurationProperties注解的源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EnableCo.

2020-11-05 19:50:13 154

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

DelegatingApplicationContextInitializer初始化器实现类是ApplicationContextInitializer接口的一个代理实现类,提供了一个属性key(context.initializer.classes)在配置文件中配置自定义的初始化器实现类;当然,也可以使用SPI方式在spring.factories配置文件配置org.springframework.context.ApplicationContextInitializer作为key来配置,两种方式都可以.

2020-10-29 18:25:27 126

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

ContextIdApplicationContextInitializer类是ApplicationContextInitializer初始化器接口实现类,会在应用程序启动的时候初始化应用程序的唯一ID。ContextIdApplicationContextInitializer设置Spring ApplicationContext上下文ID,如果spring.application.name属性存在,则将其作为ID,否则使用application默认值作为ID,源码如下:public class.

2020-10-29 18:24:40 92

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

ConfigurationWarningsApplicationContextInitializer是ApplicationContextInitializer初始化器接口的实现类,用作报告常见错误配置的警告(通过分析源码实际情况是如果系统配置包扫描(@ComponentScan)到了org或者org.springframework包就会发出警告并停止系统启动)ConfigurationWarningsApplicationContextInitializer初始化器源码:public class .

2020-10-29 18:23:46 120

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

ServerPortInfoApplicationContextInitializer是ApplicationContextInitializer接口的实现类,会通过SPI方式在应用程序启动时初始化,其主要作用是在环境Environment中添加一个属性源,将应用的本地端口号添加进去,方便通过@Value或environment获取本地端口号;ServerPortInfoApplicationContextInitializer初始化器还实现了另外一个ApplicationListener监听器,监听器实.

2020-10-29 18:22:53 114

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

spring中的StandardServletEnvironment将由基于servlet的web应用程序使用,所有基于servlet的web相关ApplicationContext类将会初始化一个StandardServletEnvironment实例。通过上面的图标可以清楚StandardServletEnvironment类的继承关系,PropertyResolver接口是用于针对任何基础源解析属性的接口;ConfigurablePropertyResolver接口是PropertyResol.

2020-10-29 18:21:44 89

原创 死磕源码系列【SystemEnvironmentPropertySourceEnvironmentPostProcessor、SpringApplicationJsonEnvironmentPostP

SystemEnvironmentPropertySourceEnvironmentPostProcessor类是EnvironmentPostProcessor接口的实现类,用来替换Environment环境中的systemEnvironment,systemEnvironment中最初存储的是SystemEnvironmentPropertySource类,现由实现类OriginAwareSystemEnvironmentPropertySource替换,OriginAwareSystemEnviro.

2020-10-27 19:16:39 97

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

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

2020-10-24 15:13:35 81

struts2.3.4

标准的struts2.3.4APIchm文档,该文档是中文版

2013-06-21

JDK_API_1.6

中文版的java开发API文档,是开发人员必备的文档!

2013-03-07

JDK_API_1.6英文版

全面的java开发必备的英文版API文档

2013-03-07

eclipse-class-decompiler-update_v2.10.0.zip

该反编译工具支持spring tool suite 在mac上反编译class文件,

2017-09-30

随风yy的留言板

发表于 2020-01-02 最后回复 2020-01-02

java 连接mongo3.2刚开始是正常的,但是过一段时间就报错

发表于 2017-09-22 最后回复 2017-09-23

热点

发表于 2012-05-22 最后回复 2013-03-11

java中的成员变量问题

发表于 2013-03-11 最后回复 2013-03-11

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

TA关注的人 TA的粉丝

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