部署spring boot 项目到tomcat容器 一开始自己 捣鼓 想 多 踩坑 果然坑还真不少 后来查了点别人的部署经验 很快就 搞定了。
步骤:
一 丶修改打包方式
在pom.xml中设置打包方式 默认 为jar 需要修改为war
<packaging>war</packaging>
二丶移除spring boot内嵌的tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--需要移除的依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
三丶加入servlet的依赖 因为项目中的用到的servlet依赖来自内嵌的tomcat现在 内嵌的tomcat移除了但我们的项目有业务依赖servlet 所以自然要引入servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
四丶启动类 继承SpringBootServletInitializer 并且重写configure方法 在里面 加载启动类资源到项目中,重新构建项目结构。
注:SpringBootServletInitializer的执行过程,简单来说就是通过SpringApplicationBuilder构建并封装SpringApplication对象,并最终调用SpringApplication的run方法的过程
@SpringBootApplication
public class HomeworkApplication extends SpringBootServletInitializer {
//继承SpringBootServletInitializer 重写 configure
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(HomeworkApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(HomeworkApplication.class, args);
}
}
五丶修改配置 文件(其实不需要配置 写出来是因为我在这里发现了坑 )
网上好多人都说要 修改配置文件appication.yml
server:
port: 8089
servlet:
context-path: /homework/
注:我个人踩了一下坑 其实配不配都可以 因为效果一样
个人理解:yml中的server配置应该是对内置tomcat的一个配置 我们现在并没有用内置tomcat 所以配不配都一样 都不会生效 就算配了
port --> 还是以tomcat的配置文件中的端口启动
context-path --> 还是以war包的名字作为项目路径
但是需要注意一点 如果你配了上面两个属性就得配对了 不能有语法 上的错误
例如
#正确配法:
server:
port: 8089
servlet:
context-path: /homework/
#错误配法
server:
port: 8089
servlet:
context-path: homework
六丶打包项目
在maven中双击insert 或者命令打包(命令可以在网上找)
七丶配置本地tomcat(若8080没有被占用或者只有 单台服务器下面的就不需要看了)
1.下载或者拷贝一个 旧的tomcat做准备工作
目录介绍
2.进入conf文件夹下的server.xml修改tomcat的默认启动端口
3.进入conf文件夹下的tomcat-users.xml修改tomcat的项目管理页面的 用户名密码及角色
<role rolename="manager-gui"/>
<user username="admin" password="" roles="manager-gui"/>
4.将springboot的war包拷贝到webapps下 ,修改war包名称 (war包名称 对应 项目访问路径)
例如我的项目叫 homework.war
5.在bin下运行startup.bat/startup.sh就可以访问项目了(这个时候webapps下对多一个以war包名 命名的 文件夹 比如我的:homework)
6.如果不想管理项目的话 直接将文件夹丢到 ROOT文件夹下也可以 tomcat运行首先加载的 就是ROOT文件夹下的项目 tomca默认在ROOT下部署的是管理项目的一个小系统
到此 springboot部署本地tomcat容器就完成了。