文档章节

Zipkin-1.19.0学习系列4:(启动事件分发)

强子1985
 强子1985
发布于 2017/01/08 09:24
字数 463
阅读 181
收藏 1

下面开始分析builder.listeners(new RegisterZipkinHealthIndicators());

这个就是增加了一个监听器,没啥说的,

然后执行

builder = builder.properties("spring.config.name=zipkin-server");

这个很简单。

接下来,创建了一个事件分发器

public EventPublishingRunListener(SpringApplication application, String[] args) {
		this.application = application;
		this.args = args;
		this.initialMulticaster = new SimpleApplicationEventMulticaster();
		for (ApplicationListener<?> listener : application.getListeners()) {
			this.initialMulticaster.addApplicationListener(listener);
		}
	}

而listener有如下:

print application.getListeners()
 application.getListeners() = "[
org.springframework.boot.context.config.ConfigFileApplicationListener@498d318c, 
org.springframework.boot.context.config.AnsiOutputApplicationListener@6e171cd7, 
org.springframework.boot.logging.LoggingApplicationListener@402bba4f, 
org.springframework.boot.logging.ClasspathLoggingApplicationListener@795cd85e, 
org.springframework.boot.autoconfigure.BackgroundPreinitializer@59fd97a8, 
org.springframework.boot.context.config.DelegatingApplicationListener@f5ac9e4, 
org.springframework.boot.builder.ParentContextCloserApplicationListener@123ef382, 
org.springframework.boot.ClearCachesApplicationListener@dbf57b3, 
org.springframework.boot.context.FileEncodingApplicationListener@384ad17b, 
org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener@61862a7f, 

zipkin.server.RegisterZipkinHealthIndicators@441772e]"

然后,启动时,

@Override
	public void started() {
		//看到这里了
		this.initialMulticaster
				.multicastEvent(new ApplicationStartedEvent(this.application, this.args));
	}

接下来就是这几个对象的事件处理了。

我们来看一下怎么处理的。

1)ConfigFileApplicationListener

执行过程如下:

> 
Step completed: "thread=main", org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(), line=153 bci=0
153    		if (event instanceof ApplicationEnvironmentPreparedEvent) {

main[1] print event
 event = "org.springframework.boot.context.event.ApplicationStartedEvent[source=org.springframework.boot.SpringApplication@4a94ee4]"
main[1] next
> 
Step completed: "thread=main", org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(), line=157 bci=15
157    		if (event instanceof ApplicationPreparedEvent) {

main[1] next
> 
Step completed: "thread=main", org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(), line=160 bci=27
160    	}

说明一个都不执行,很好!

2)LoggingApplicationListener.onApplicationEvent

@Override
	public void onApplicationEvent(ApplicationEvent event) {
		//接收到了事件
		if (event instanceof ApplicationStartedEvent) {
			//走这个分支
			onApplicationStartedEvent((ApplicationStartedEvent) event);
		}
		else if (event instanceof ApplicationEnvironmentPreparedEvent) {
			onApplicationEnvironmentPreparedEvent(
					(ApplicationEnvironmentPreparedEvent) event);
		}
		else if (event instanceof ApplicationPreparedEvent) {
			onApplicationPreparedEvent((ApplicationPreparedEvent) event);
		}
		else if (event instanceof ContextClosedEvent && ((ContextClosedEvent) event)
				.getApplicationContext().getParent() == null) {
			onContextClosedEvent();
		}
		else if (event instanceof ApplicationFailedEvent) {
			onApplicationFailedEvent();
		}
	}

	private void onApplicationStartedEvent(ApplicationStartedEvent event) {
		//到这里
		this.loggingSystem = LoggingSystem
				.get(event.getSpringApplication().getClassLoader());
		this.loggingSystem.beforeInitialize();
	}

结论:初始化日志系统,没兴趣。

---

3)DelegatingApplicationListener.onApplicationEvent

Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationListener.onApplicationEvent(), line=55 bci=0
55    		if (event instanceof ApplicationEnvironmentPreparedEvent) {

main[1] step
> 
Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationListener.onApplicationEvent(), line=66 bci=79
66    		if (this.multicaster != null) {

main[1] print this.multicaster
 this.multicaster = null
main[1] step
> 
Step completed: "thread=main", org.springframework.boot.context.config.DelegatingApplicationListener.onApplicationEvent(), line=69 bci=94
69    	}

什么都不做,很好,结束!

4)LiquibaseServiceLocatorApplicationListener.onApplicationEvent

Step completed: "thread=main", org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener.onApplicationEvent(), line=43 bci=0
43    		if (ClassUtils.isPresent("liquibase.servicelocator.ServiceLocator", null)) {

main[1] next
> 
Step completed: "thread=main", org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener.onApplicationEvent(), line=46 bci=20
46    	}

main[1] step
> 

依然什么都不做,节省时间。

5)RegisterZipkinHealthIndicators.onApplicationEvent


Breakpoint hit: "thread=main", zipkin.server.RegisterZipkinHealthIndicators.onApplicationEvent(), line=27 bci=0
27        if (!(event instanceof ApplicationReadyEvent)) return;

main[1] step

Step completed: "thread=main", org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(), line=176 bci=39

main[1] main[1] step
> 
Step completed: "thread=main", org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(), line=178 bci=101

6)

© 著作权归作者所有

强子1985

强子1985

粉丝 904
博文 1326
码字总数 971511
作品 9
南京
架构师
私信 提问
Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程

关联系列 解析WMS系列 深入理解JNI系列 输入系统系列 前言 在上一篇文章中,我们学习了输入事件的处理,输入事件会交由InputDispatcher进行分发,那么InputDispatcher是如何进行分发的?这篇...

刘望舒
2018/12/17
0
0
Parted Magic 2017_01_08,内核更新至 Linux 4.9.1

Parted Magic 2017_01_08 发布了。Parted Magic 是一份自启动运行 CD/USB/PXE 发行,其主要目的在于给硬盘分区。尽管 GParted 和 Parted 是其主要应用软件,该 CD/USB 发行也提供其他应用程序...

局长
2017/01/10
1K
1
Spring Cloud微服务之 sleuth+zipkin日志聚合

1.简介 (1)什么是服务追踪 Sleuth 在微服务架构中,要完成一个功能,通过Rest请求服务API调用服务来完成,整个调用过程可能会聚合多个后台服务器协同完成。在整个链路上,任何一处调用超时...

编程SHA
03/25
0
0
Android输入系统(二)IMS的启动过程和输入事件的处理

本文首发于 刘望舒的博客 地址:liuwangshu.cn/framework/i… 关联系列 解析WMS系列 深入理解JNI系列 输入系统系列 前言 在上一篇文章中,我们学习了IMS的诞生(创建),IMS创建后还会进行启...

刘望舒
2018/11/20
0
0
Java Netty 学习(七) - 第一个Netty程序

版权声明:本博客所有的原创文章,转载请注明出处,作者皆保留版权。 https://blog.csdn.net/anLA_/article/details/83042562 介绍 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、...

6点A君
2018/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数组算法

/*数组的相关的算法操作:1、在数组中找最大值/最小值*/class Test11_FindMax{public static void main(String[] args){int[] array = {4,2,6,8,1};//在数组中找最大...

architect刘源源
37分钟前
2
0
okhttp3 以上版本在安卓9.0无法请求数据的解决方案

应用官方的说明:在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。且Android P 限制了明文流量...

chenhongjiang
今天
11
0
简单示例:NodeJs连接mysql数据库

开篇引用网上的说法: 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于...

李朝强
今天
8
0
大数据学习路线

年薪30W大数据学习路线图: 一、Hadoop入门,了解什么是Hadoop 1、Hadoop产生背景 2、Hadoop在大数据、云计算中的位置和关系 3、国内外Hadoop应用案例介绍 4、国内Hadoop的就业情况分析及课程...

陈小君
今天
3
0
解读 Kylin 3.0.0 | 更敏捷、更高效的 OLAP 引擎

在近期的 Apache Kylin Meetup 成都站上,我们邀请到 Kyligence 架构师 & Apache Kylin Committer 倪春恩对 Kylin 3.0.0 版本的一些重要功能及改进从使用到原理进行了介绍: Apache Kylin 在...

ApacheKylin
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部