SpringBoot使用IDEA设置的外部Tomcat启动

前言

      使用springboot内嵌的tomcat启动是没问题,但是工程是要放到服务器上的tomcat的,所以springboot内嵌的能够启动,但不代表服务器的tomcat能启动起来,我就遇到了这个问题,所以本地使用外部的tomcat启动,模拟服务器的tomcat可以测试一下,有问题及时修复,不要等到放到服务器上时才发现问题

   昨天遇到的问题,使用sprintboot自带的tomcat启动是没问题的,但是使用外部的tomcat启动一直没有加载启动类,排查了几个小时没解决;最后发现启动没有继承SpringBootServletInitializer导致总结一下idea使用外部tomcat时遇到的坑

1.idea中配置tomcat(假设你的tomcat已经已下载且安装好)

  1.1选择Edit Configuration选项

  

  1.2 点击加号选择tomcat中的local

 配置如图所示,URL路径,HTTP port 这里配置的是8080

1.3 Deployment的配置

选择war包,注意后缀为war exploded不要选

  

 

 1.4 环境变量的一些参数根据需要配置

1.5 点击File->Project Structure

 

  到此tomcat的配置就完成了

2.sprintboot的配置(假设sprintboot项目你已经建好了)

  2.1 启动类

  • 修改启动类,使其继承SpringBootServletInitializer类,重写configure方法。
  • 如果SpringBoot帮我们建立了SpringBootServletInitializer类文件,直接删掉,修改最开始的SpringBootApplication 项目启动类,就是有main方法的那个
@SpringBootApplication(scanBasePackages = {"io.test"})
@EnableScheduling
public class BigscreenApplication extends SpringBootServletInitializer {


public static void main(String[] args) {
SpringApplication.run(BigscreenApplication.class, args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
logger.info("start BigscreenApplication with:" + System.getenv().toString());
return builder.sources(BigscreenApplication.class);
}
}

 

2.2 pom文件修改

   因为要打成war所以需要起个名称<finalName>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
        <finalName>test</finalName>
    </build>

 2.3如果日志log4j2.xml配置未生效,可能是没引入spring-boot-starter-logging

 注意:spring-boot-starter-web中去除spring-boot-starter-logging依赖,否则日志jar包会有冲突,导致启动失败

 

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 

2.4 编译时可能会报:Error java: 无法访问javax.servlet.ServletException 找不到javax.servlet.ServletException的类文件

是因为缺少servlet的jar包引入即可

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

 

posted @ 2020-04-25 13:36  纵码万水千山  阅读(4504)  评论(0编辑  收藏  举报