springboot的war想要在tomcat服务器上运行,必须添加配置。
1.继承并重写
让启动类继承SpringBootServletInitializer,并重写configure方法,关键代码如下
@SpringBootApplication
public class UploadDemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(UploadDemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
}
若在创建SpringBoot项目时已经自动创建,则跳过此步。
2.修改pom文件
2.1 在pom文件中添加打包方式为war
<groupId>com.example</groupId> <artifactId>upload-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>upload-demo</name> <!--配置打包方式war--> <packaging>war</packaging> <description>Demo project for Spring Boot</description>
2.2 修改tomcat依赖
1)对内置的tomcat进行设置
由于springboot有内置的tomcat,所以在外部tomcat中部署时,必须对内置的tomcat进行设置,有两种方式,二选一即可,本人觉得第二种方式更简单。
第一种方式:移除内置的tomcat
在web的依赖中移除tomcat,并添加servlet依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--移除内嵌的tomcat--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!--servlet的 api--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
第二种方式:修改tomcat的使用范围
我们在开发时需要内置的tomcat,而在部署时不需要,就可以设置tomcat只在编译和测试时生效。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
2)在build中指定打包的项目名称
<build> <finalName>upload-demo</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
要注意,tomcat进行部署的时候,访问需要带项目名称,所以就指定了打包后的名称。为了在开发环境和正式环境的一致性,请在application.properties文件中配置访问接口时带指定的路径(或项目名)。配置后在开发环境访问接口时,必须加配置的路径才能访问。
server.servlet.context-path=/upload-demo
3.打包部署
清理项目,进行打包:
把这个war包放到tomcat的webapps中,然后启动,访问即可。(需带项目名称)