本文共 2622 字,大约阅读时间需要 8 分钟。
外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法
package com.test.chaosblade;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;/** * @description: * @time: 2020-08-28 15:49 */@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, SecurityAutoConfiguration.class })public class ChaosbladeApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(ChaosbladeApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(this.getClass()); //此处的ChaosbladeApplication是springboot启动类 }}
备注:
该类与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,但却避免了编写额外的XML文件的麻烦如果要将项目打成war包,部署到外部tomcat的话,需要修改pom.xml文件。引入的spring-boot-starter-web包含了内嵌的tomcat容器,如果直接部署在外部tomcat的话会造成冲突报错。针对这个问题,可以采用以下两种方式解决:
方法1:排除内嵌tomcat
这样打出的war包中,其lib目录下才不会包含Tomcat相关的jar包org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat
由于SpringBootServletInitializer需要依赖 javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有javax.servlet。tomcat-embed-jasper中scope必须是provided,provided的作用可以看我的XXXX文章。如果没用provided,那么最终打好的war里面就会有servlet-api这个jar,这样就会与tomcat本身的产生冲突
org.apache.tomcat.embed tomcat-embed-jasper provided
方法2:增加配置
spring-boot-starter-tomcat是Spring Boot默认就会配置的,将其设置为provided的目的是为了在打包时将该包(依赖)排除org.springframework.boot spring-boot-starter-tomcat provided org.apache.tomcat.embed tomcat-embed-jasper provided
war
⚠️注意:
demo
转载地址:http://suxii.baihongyu.com/