SprngBoot之去除内嵌Tomcat

场景

在我们将SpringBoot项目部署到Tomcat是,会一直报端口被占用的错误,Tomcat无法启动。我们既想在开发中使用内嵌Tomcat自动启动,又想在部署时排除内嵌Tomcat.

原因

产生该问题的原因是因为SpringBoot项目本身内嵌了Tomcat,当我们启动项目是,其内部的Tomcat也启动了,因此造成端口被占用的问题。

解决方案

  1. 去除SpingBoot框架内嵌的Tomcat服务器,其Tomcat是集成在spring-boot-starter-web中的,如下:
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-tomcatartifactId>
			
			<scope>providedscope>
		dependency>
		 
		<dependency>
			<groupId>javax.servletgroupId>
			<artifactId>javax.servlet-apiartifactId>
			
			<scope>providedscope>
		dependency>

等价于

	
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
			
			<exclusions>
				<exclusion>
					<groupId>org.springframework.bootgroupId>
					<artifactId>spring-boot-starter-tomcatartifactId>
				exclusion>
			exclusions>
		dependency>

	<dependency>
	      <groupId>javax.servletgroupId>
	      <artifactId>javax.servlet-apiartifactId>
	      <version>3.1.0version>
	      <scope>providedscope>
    dependency>
  1. SpringBoot主程序继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class SpringBootMainApplication extends SpringBootServletInitializer  {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootMainApplication.class, args);
    }
	// 重写configure,设置启动类被本类。
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringBootMainApplication.class);
    }
}
  1. 如果在IDEA中,Run–>Edit Configuration…
    SprngBoot之去除内嵌Tomcat_第1张图片
    确认选中红色选项为选中状态
    SprngBoot之去除内嵌Tomcat_第2张图片

你可能感兴趣的:(问题笔记,SpringBoot)