基于application和bootstrap的加载顺序及区别说明

 更新时间:2023年07月10日 10:18:40   作者:lei_dx  
这篇文章主要介绍了application和bootstrap的加载顺序及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

application和bootstrap的加载顺序及区别

bootstrap.yml(bootstrap.properties)先加载

application.yml(application.properties)后加载

bootstrap.yml 用于应用程序上下文的引导阶段。

bootstrap.yml 由父Spring ApplicationContext加载。

父ApplicationContext 被加载到使用 application.yml 的之前。

bootstrap.yml

是系统级别的一些参数配置,这些参数一般是不变的。

application.yml 一般用来定义单个应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。

使用Spring Cloud Config Server时,应在 bootstrap.yml 中指定:

spring.application.name
spring.cloud.config.server.git.uri

注意:

一旦bootStrap.yml 被加载,则内容不会被覆盖,即便后期加载的application.yml的内容标签与bootstrap的标签一致,application 也不会覆盖bootstrap, 而application.yml 里面的内容可以动态替换。

bootstrap.yml与application.yml执行顺序(原因:类加载器的先后顺序)

结论:bootstrap.yml 先于 application.yml 加载

bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等

application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

bootstrap.yml 先于 application.yml 加载

应用:当使用 Spring Cloud Config Server 的时候

bootstrap.yml 中

spring.application.name: test
spring.cloud.config.name: testName
spring.cloud.config.uri: http://config1.spring-demo.test.com:8888

原因:类加载器的先后顺序

负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 

虚拟机自带的加载器

1.启动类加载器(Bootstrap)C++

2.扩展类加载器(Extension)Java

3.应用程序类加载器(AppClassLoader)Java  也叫系统类加载器,加载当前应用的classpath的所有类

4.用户自定义加载器  Java.lang.ClassLoader的子类,用户可以定制类的加载方式

注意java中反射的三种方法

1.通过Object类的getClass方法来获取

java.lang.Object中定义有getClass方法:public final Class getClass()所有Java对象都具备这个方法,该方法用于返回调用该方法的对象的所属类关联的Class对

2.用.class的方式

使用类名加“.class”的方式即会返回与该类对应的Class对象。

3.使用Class.forName方法

Class有一个著名的static方法

forName:public static Class forName(String className) throws ClassNotFoundException

该方法可以根据字符串参数所指定的类名获取与该类关联的Class对象。

如果该类还没有被装入,该方法会将该类装入JVM。

该方法声明抛出ClassNotFoundException异常。

顾名思义,当该方法无法获取需要装入的类时(例如,在当前类路径中不存在这个类),就会抛出这个异常。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring中的10种事务失效的常见场景

    Spring中的10种事务失效的常见场景

    这篇文章主要介绍了Spring中的10种事务失效的常见场景,Spring的声明式事务功能更是提供了极其方便的事务配置方式,配合Spring Boot的自动配置,大多数Spring Boot项目只需要在方法上标记@Transactional注解,即可一键开启方法的事务性配置,需要的朋友可以参考下
    2023-11-11
  • 一文详解如何在Java中启动线程

    一文详解如何在Java中启动线程

    今天要跟大家聊一聊Java多线程的原理和使用方式,Java多线程是提高程序性能的重要机制,了解线程生命周期、同步机制、线程池和线程间通信等概念,可以帮助我们编写出高效、可靠的多线程程序,需要的朋友可以参考下
    2024-07-07
  • JPA多数据源分布式事务处理方案

    JPA多数据源分布式事务处理方案

    这篇文章主要为大家介绍了JPA多数据源分布式事务处理的两种事务方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • Netty分布式Future与Promise执行回调相关逻辑剖析

    Netty分布式Future与Promise执行回调相关逻辑剖析

    这篇文章主要为大家介绍了Netty分布式Future与Promise执行回调相关逻辑剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • java notify和notifyAll的对比

    java notify和notifyAll的对比

    这篇文章主要介绍了 java notify和notifyAll的对比的相关资料,需要的朋友可以参考下
    2017-02-02
  • java.mail实现发送邮件

    java.mail实现发送邮件

    这篇文章主要为大家详细介绍了java.mail实现发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • SpringBoot中关于static和templates的注意事项以及webjars的配置

    SpringBoot中关于static和templates的注意事项以及webjars的配置

    今天小编就为大家分享一篇关于SpringBoot中关于static和templates的注意事项以及webjars的配置,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • springboot集成springsecurity 使用OAUTH2做权限管理的教程

    springboot集成springsecurity 使用OAUTH2做权限管理的教程

    这篇文章主要介绍了springboot集成springsecurity 使用OAUTH2做权限管理的教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Spring Security实现两周内自动登录

    Spring Security实现两周内自动登录"记住我"功能

    登录过程中经常使用的“记住我”功能,也就是我们经常会在各种网站登陆时见到的"两周内免登录",“三天内免登录”的功能。今天小编给大家分享基于Spring Security实现两周内自动登录"记住我"功能,感兴趣的朋友一起看看吧
    2019-11-11
  • 使用Netty实现类似Dubbo的远程接口调用的实现方法

    使用Netty实现类似Dubbo的远程接口调用的实现方法

    本文介绍了如何使用Netty框架实现类似Dubbo的远程接口调用,通过自定义编解码器、通信协议和服务注册中心等实现远程通信和服务治理。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-04-04

最新评论