Spring boot 启动顺序整理

起因:

最近遇到一个奇怪的事情,工程手工打包没有问题,通过jenkins打包启动就有问题。

工程背景:最近接入apollo配置中心。

验证方式:去掉配置中心,使用application.yaml以及对应的dev等的配置文件,手工打包和jenkins打包都是没有问题。

解决方案:对于apollo配置的类(@Configuration注解)明确写出bean的名字(比如:apolloRedisConfig),

                   对于使用配置的类(RedisClient,使用@Component注解)添加@DependsOn(value = "apolloRedisConfig")

如此,就强制指定了依赖关系,就不会出现先加载REdisClient类,获取不到配置信息,抛出异常,启动失败。

思考:

A.我对项目启动做了debug,所有的注解定义的类(我自己定义的类)的启动顺序如下:

    1.@SpringBootApplication,这个也是项目的启动类;

    2.@Configuration, @RestControllerAdvice , 这两个没有明显的先后顺序,间杂出现;

        同时,定义的SpringContextUtils implements ApplicationContextAware也出现在中间,

        看起来也没有明显的顺序,PS:这个添加类@Component注解;

    3.@Controller, @RestController

    4.@Component, @Service等是没有明显顺序,看起来是按照文件夹的命名排序顺序加载的;

B.SpringFactoriesLoader.java

    来自于:spring-core.jar

    package org.springframework.core.io.support;

    项目启动的时候,会在SpringApplication.java的方法:getSpringFactoriesInstances中使用到SpringFactoriesLoader.java

    SpringFactoriesLoader.java会从META-INF/apring.factories中获取需要加载的类

    请参考:spring-boot/2.1.8.RELEASE 的spring.factories

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容