SpringBoot容器刷新前怎么回调ApplicationContextInitializer


本篇内容介绍了“SpringBoot容器刷新前怎么回调ApplicationContextInitializer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本文创建的实例工程采用SpringBoot 2.2.1.RELEASE + maven 3.5.3 + idea进行开发具体的SpringBoot项目工程创建就不赘述了,核心的pom文件,无需额外的依赖配置文件 application.yml, 也没有什么特殊的配置当我们希望实现一个自定义的上下文初始化时,非常简单,实现上面这个接口就行了,如上面自定义一个扩展点,如何使它生效呢?官方提供了三种方式,如在启动时,直接进行注册: springApplication.addInitializers(new ApplicationContextInitializer01());当我们的扩展点是放在一个jar包中对外提供时,使用上面的启动注册方式显然是不可行的,此时更推荐的做法就是通过Spring的SPI机制进行注册在资源目录下的META-INF/spring.factories文件中进行注册说明上面SPI的机制非常推荐大家使用,在之前的文章中,AutoConfiguration的注册通常也是使用这种方式除了上面的两种注册方式之外,另外还有一个配置文件的方式,在配置文件application.propertiesapplication.yml中,如下配置启动测试上面三种注册方式,我们实现三个自定义的扩展点,然后启动之后,看一下实际输出上面的输出,可以简单的得出一个结论,不同注册方式的优先级(为了更合理的验证下面的观点,推荐大家修改下上面三个自定义扩展点名,排除掉是因为扩展名导致的排序问题)配置文件注册 > SPI注册 > 启动时注册对于自定义的扩展点实现,当存在顺序关系时,我们可以通过@Order注解来实现, 如当上面的三个扩展点都是通过启动方式注册时输出实例如下接着重点来了若上面的三个自定义实现,不是相同的注册方式,如将03采用配置文件方式进行注册,那么01, 02 依然是启动注册则顺序是 03 > 02 > 01即 @Order注解修饰的顺序,并不能打破 配置文件 > SPI > 启动方式注册的顺序关于自定义实现类的执行顺序,规则如下配置文件 > SPI > 启动方式相同的注册方式,可以通过 @Order 注解进行修饰,值越小则优先级越高最后我们再来看一下,这个扩展点到底有什么用,我们再什么场景下会用到这个呢?一个经常可以看到的应用场景如通过它来指定需要激活的配置文件但是一般也很少见到有人这么干,因为直接使用配置参数就行了,那么有场景需要这么做么?答案当然是有的,比如现在广为流行的docker容器部署,当我们希望每次都是打同一个镜像,然后在实际运行的时候,根据不同的环境来决定当前镜像到底启用哪些配置文件,这时就有用了比如我们通过容器的环境参数 app.env 来获取当前运行的环境,如果是prod,则激活application-prod.yml; 如果是t免费云主机域名est,则激活application-test.yml那么此时可以这么干“SpringBoot容器刷新前怎么回调ApplicationContextInitializer”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Laravel中如何接入workerman

这篇文章主要介绍“Laravel中如何接入workerman”,在日常操作中,相信很多人在Laravel中如何接入workerman问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中如何接入workerman”的疑惑…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/02 16:21
下一篇 03/02 16:21

相关推荐