tomcat启动war包原理 tomcat部署war包步骤

Springboot项目war包模式启动流程对于项目部署的需要,当前项目需要通过war包进行部署,这就带来了一个问题,就是原来***in方法中的一些逻辑会失效,这样就会出现一些不可预知的错误#1。这里加载了一个类路径下的json文件,它被加载到系统属性中,但是在随后的运行中出现了Nu...

Springboot项目war包模式启动流程

对于项目部署的需要,当前项目需要通过war包进行部署,这就带来了一个问题,就是原来***in方法中的一些逻辑会失效,这样就会出现一些不可预知的错误#1。这里加载了一个类路径下的json文件,它被加载到系统属性中,但是在随后的运行中出现了NullPointException。我很疑惑。我的本地操作没问题,但是发布到环境就有问题了。看了一下源代码,我意识到我们的本地操作是在java -jar模式下,虚拟机此时正在运行项目的***in方法。但是,在发布到环境中之后,它将作为war包运行。此时,这个项目的***in方法不会被执行,而是由tomcat的***in方法启动。这时候,问题来了。数据不会加载到全局系统变量中。
1#


咨询完spring-web的依赖关系,META-INF下有一个服务的文件夹,
javax . servlet . servlet container Initializer。这东西到底是做什么的?实际上,tomcat启动后,文件中的类是通过JDK的SPI调用实现的。这里spring用的是org . spring framework . web . springservletcontainerinitializer,打开这个类,你会发现类上有HandlesTypes的注释。那么这个装饰课的目的是什么呢?主要用作onStartup方法的参数——web appinitializerclass
会收集所有实现了这个接口的类,循环调用它们的onStartup方法。
#2

#3


然后我们的启动类
org . spring framework . boot . web . servlet . support . springbootservletinitializer恰好又是它的子类,所以会被调用。这里采用了模板设计模式。

org . spring framework . boot . web . servlet . support . spring boot servletinitializer #此配置方法作为org . spring framework . boot . web . servlet . support . spring boot servletinitializer # createrootapplicationContext的一部分,影响主进程。构建一个SpringApplication对象并执行其run方法。在这里,最常规的跳羚项目开始了。

#4


最终的解决方案是通过订阅spring的容器刷新事件#5来完成静态数据的加载,因为jar包启动和war包启动都需要调用spring的核心方法——refresh。刷新完成后,将抛出ContextRefreshedEvent,订阅该事件的所有bean都将收到该事件。这里,将执行一些操作来完成一些数据加载
#

本文来自不茫然未来投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/642182.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-20
下一篇 07-20

相关推荐

  • tomcat启动war包原理 tomcat部署war包步骤

    Springboot项目war包模式启动流程对于项目部署的需要,当前项目需要通过war包进行部署,这就带来了一个问题,就是原来***in方法中的一些逻辑会失效,这样就会出现一些不可预知的错误#1。这里加载了一个类路径下的json文件,它被加载到系统属性中,但是在随后的运行中出现了Nu

    2023-07-20 11:56:01
    745 0
  • 国际和平日 International Day of Peace

    关于war关于和平鸽关于国际和平日关于理想 I believe everyone is eager forcomfortable, peaceful life and hating wars. So the United Stations decide toset up an International Day of peace. It falls on the third Tuesday of Septemberevery year, aiming at celebr

    2023-03-05 16:40:01
    896 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信