SpringBoot与Tomcat的启动(内嵌Tomcat)
环境:
SpringBoot 2.0.1
使用SpringBoot开发时,可以通过Maven将工程打成jar包,jar包内嵌Tomcat,这种方式SpringBoot工程将在启动的时候陪察哪,带动Tomcat的启动,下面分析SpringBoot如何带动Tomcat启动
一个简单的SpringBoot工程启动类
跟进 SpringApplication#run 方法
如果对Spring的启动流程有了解的话,应该知道Spring启动过程中,最重要的就芦码是 AbstractApplicationContext#refresh() 过程,在这个方法中Spring执行了BeanFactory的初始化,Bean的实例化、属性填充、初始化操作等等重要的操作,该方法主要逻辑如下:
仔细观察这个方法,可以发现其中调用了几个空方法,这里应用了 模板模式 ,在 refresh 方法中定义了主干执行流程,并留有空的方法给子类做个性化定制
现在开始,通过debug来看看SpringBoot如何启动Tomcat容器
前面构造 SpringApplicaton 时,没中已经推断出当前Web工程类型,当开始执行 #run 方法时,会根据不同类型的Web项目创建不同类型的ApplicationContext
创建好 ApplicationContext 之后,看到 refreshContext(context) ,联系本文开头Spring启动的 AbstractApplicationContext#refresh 方法,该方法其实就是触发了后者的执行
执行 refreshContext 方法,来到前面根据 webApplicationType 创建的容器类 ServletWebServerApplicationContext
进入到 TomcatServletWebServerFactory ,可以看到如下启动内置Tomcat的过程
至此,Tomcat继承Spring的 AbstractApplicationContext 类,覆盖它的模板方法 onRefresh ,SpringBoot在自身启动的过程中,启动了内置的Tomcat服务器
从零开始新建Springboot项目之项目启动(一)
一般都是使用搭建好的框架进行业务逻辑开发,一直不清楚整个项目是如何从零到一构建出来的。所以开一个帖子,记录一下一个springboot项目是如何构建的。
使用的工具为idea
选择maven或者spring initializr都可以。spring initializr会在pom中自动添加一些springboot用罩段到的jar包,此处选择maven。起好名字后,一路next即可
从实际开发角度,构建Module不是必选项。但学习嘛,还是要知道是怎么创建的
右键项目名称 - New - Module
依然选择maven,起名字即可。一般命名为:XXXX-Controller,XXXX-Service等等
建好后,pom中会多出以下内容
(放弃多模块配置)
可在此处搜索 mvnrepository
首先添加parent,作为父级依赖。位置在 project/project 的下一级,与 groupIdorg.example/groupId 同级,
在 parent/parent 同级新建 dependency/dependency 标签,引入web项目需要的依赖
如果是多模块的项目,需要在每一个模块的pom文件中,添加其依赖的其他模块。例如controller依赖service,则需要在controller的pom文件中添加以下依赖信息。如果不是多模块项目,可以忽略
在java路径下新建顶级路径 com.tardis ,在此路径下新建文件 CustomerApplication (名字随意)。新建 controller , service 的 package 。在 CustomerApplication 添加如下方法
文件的层级关系如图
在 resource 目录下,新建 application.yml , application.dev.yml , application.prod.yml 文件,作为总体,开枯蔽发环境,生产环境的配置文件。配置文件格式为 properties , yml 均可,此处使用 yml ,看起来比较简洁清晰物败誉
层级关系如图
为了更好地演示效果,可以先写一个简单的Controller进行测试,在controller文件夹中新建class,名字随意。文件层级如图。放一个最简单的接口。
使用postman调用,返回结果如下
运行SpringBoot工程的四种方法
运行springboot工程四种方法李斗:
springboot工程的pom.xml文件中默认有:
所以可以用下面的方法图像化运行
点击左下角的小窗口,然后右侧会出现 Mavne Projects
或者用命令行运行:
首先进入springboot的工程目录,然后运行 mvn spring-boot:run 命令
springboot工程的pom.xml文件中默认的打包形式是jar包
打包方法如下:
运行jar包:
maven默认打包在target目录,进入springboot工程的target目录,然后运行 java -jar xxx.jar 命乎扰皮令来运行程序。
修改springboot工程的pom.xml文件中的打包形式岁差为war包
之后的打包方法与运行方法与 打包成jar包运行 类似,唯一不同的是运行的命令是 java -jar xxx.war 这样的形式。