简历知识点准备

Spring Boot启动过程

Spring Boot启动流程简单解释
Spring Bean是什么
启动流程主要分为三个部分,第一部分进行SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块、及核心的创建上下文环境模块,第三部分是自动化配置模块。
Spring Boot程序有一个入口,就是main方法。main里面调用SpringApplication.run()启动整个Spring Boot程序,该方法所在类需要使用@SpringBootApplication注解。
运行run方法之前需要对SpringApplication进行初始化,会调用一个private类型的的initialize方法。
SpringBoot启动的时候,不论调用什么方法,都会构造一个SpringApplication的实例,然后调用这个实例的run方法,这样就表示启动SpringBoot。

在run方法调用之前,也就是构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:
1.把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数。
2.判断是否是web程序,并设置到webEnvironment这个boolean属性中。
3.找出所有的初始化器,默认有5个,设置到initializers属性中 。
4.找出所有的应用程序监听器,默认有9个,设置到listeners属性中 。
5.找出运行的主类(main class) 。

SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:
1.构造一个StopWatch,观察SpringApplication的执行 。
2.找出所有的SpringApplicationRunListener并封装到SpringApplicationRunListeners中,用于监听run方法的执行。监听的过程中会封装成事件并广播出去让初始化过程中产生的应用程序监听器进行监听 。
3.构造Spring容器(ApplicationContext),并返回 。

3.1 创建Spring容器的判断是否是web环境,是的话构造AnnotationConfigEmbeddedWebApplicationContext,否则构造 AnnotationConfigApplicationContext 。

3.2 初始化过程中产生的初始化器在这个时候开始工作 。

3.3 Spring容器的刷新(完成bean的解析、各种processor接口的执行、条件注解的解析等等) 。

4.从Spring容器中找出ApplicationRunner和CommandLineRunner接口的实现类并排序后依次执行。

Spring Boot启动流程
1、新建module,在主程序类加入断点,启动springboot
2、首先进入SpringAplication类run方法
3、run方法新建SpringApplication对象
4、SpringApplication对象的run方法,首先创建并启动计时监控类
5、接着通过configureHeadlessProperty设置java.awt.headless的值
6、接着调用getRunListeners创建所有spring监听器
7、接着DefaultApplicationArguments初始化应用应用参数
8、接着prepareEnvironment根据运行监听器和参数准备spring环境
9、接着调用createApplicationContext方法创建应用上下文
10、通过prepareContext准备应用上下文
11、refreshContext方法刷新上下文
12、调用stop方法停止计时监控器类
13、调用started发布应用上下文启动完成事件
14、callRunners方法执行所有runner运行器
15、调用running发布应用上下文就绪事件
16、最后返回应用上下文

Java线程池有几种类型

Java线程池类型
Java线程池
1、newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
这种类型的线程池特点是:
工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。
在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统OOM。

2、newFixedThreadPool
创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。

3、newSingleThreadExecutor
创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。

4、newScheduleThreadPool
创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。

5、newSingleThreadScheduledExecutor
创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行并且可定时或者延迟执行线程活动。

JVM中堆大小设置命令

JVM堆大小的设置
Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,,其最小内存值和Survivor区总大小分别是(10240m 2048m);
解析:
-Xmx:最大堆大小
-Xms:初始堆大小
-Xmn:年轻代大小
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值
年轻代5120m, Eden:Survivor=3,Survivor区大小=1024m(Survivor区有两个,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。
-Xms初始堆大小即最小内存值为10240m。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值