导语:叶子写了一个SpringBoot在打成war包部署到Tomcat时,老是提示404错误,经过多次检查修正,终于可以运行在tomcat下了。
一、修改gradle.build文件的参数
添加如下配置
apply plugin: 'war'
修改依赖,将tomcat的依赖范围修改为providedRuntime
dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' //mybatis implementation('com.baomidou:mybatis-plus-boot-starter:2.2.0') //mybatis-plus 模板 implementation('org.apache.velocity:velocity-engine-core:2.0') //自定义jar包,包含了oracle的数据库的连接 implementation fileTree(dir:'libs',include:['*.jar']) //将tomcat的依赖范围修改为providedRuntime providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') implementation('org.projectlombok:lombok:1.18.4') testImplementation 'org.springframework.boot:spring-boot-starter-test' }
二、主类继承SpringBootServletInitializer,重写configure方法
需要将你的主类Application.java改成下面的样子。
package com.cddx.hx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class HxApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(HxApplication.class); } public static void main(String[] args) { SpringApplication.run(HxApplication.class, args); } }
HxApplication这个类名根据你的实际情况修改。
三、修改src\main\resources\application.yml
增加下面的配置,这个配置不是必须的,但是如果你的tomcat服务器上有多个springboot的项目在运行,如果不修改的话,就只能运行一个。
#spring.jmx.enabled=false 可以在一个tomcat启动多个springboot项目 spring: jmx: enabled: false
四、使用gradle build命令打War包
打开Intellij Idea中的View -> Tool Windows -> Terminal ,在此窗口中直接运行命令。
gradle build
运行完成后,在项目的\build\libs目录中就会有一个 项目名称的war包,例如:
hx-0.0.1-SNAPSHOT.war
五、部署到Tomcat
直接将你的war包上传到Tomcat下面的webapps目录中,如果在conf目录下的server.xml中的unpackWARs等于true,那么war会自动解压。
autoDeploy等于true,那么会自动部署。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">