前言
使用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>