springboot打包成war,部署到tomcat⽆法访问的问题
如题:实在是太坑。平时本地测试觉得很⽅便,但是到了项⽬打包发布掉链⼦了。
如很多帖⼦⼀样:
⾸先springboot内嵌的tomcat,再依赖servlet-api,修改启动类继承SpringBootServletInitializer,打成war放⼊tomcat中
⼀、l删掉内嵌tomcat
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope><!-- 打成war的时候打开注释,本地开发⽤内嵌tomcat时加上注释 -->
</dependency>
<dependency>  spring boot选择题
<groupId>javax.servlet</groupId> 
<artifactId>javax.servlet-api</artifactId> 
<version>3.1.0</version> 
</dependency>
⼆、启动类:Application
@SpringBootApplication
@ComponentScan(basePackages = "ker")
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
再打包发布,然⽽然并卵。
最后的解决⽅法是在idea重新配了个Tomcat server。本地调试,本地Tomcat能跑起来,服务器才能跑起来。打成war包服务器也能跑起来,这才是真实的模拟环境。这也是springBoot的缺陷,所以⼤家本地开发尽量少⽤tomcat插件,尽量模拟真实环境部署。
⼀、修改打包形式
在l⾥设置 <packaging>war</packaging>
⼆、移除嵌⼊式tomcat插件
在l⾥到spring-boot-starter-web依赖节点,在其中添加如下代码,
<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的依赖
下⾯两种⽅式都可以,任选其⼀
四、修改启动类,并重写初始化⽅法
我们平常⽤main⽅法启动的⽅式,都有⼀个App的启动类 
我们需要类似于l的配置⽅式来启动spring上下⽂了,在Application类的同级添加⼀个SpringBootStartApplication类,其代码如下:
batis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication@MapperScan("com.lanhaifeng.boke.mapper") //配置扫描mapper接⼝的地址
public class BokeApplication extends SpringBootServletInitializer {
  public static void main(String[] args) {
    SpringApplication.run(BokeApplication.class, args);
  }
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(BokeApplication.class);
  }
}
五、使⽤maven打包
mvn clean package

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。