springboot项目打包并部署到Tomcat上及报错处理
在Spring Boot项目中,要将应用打包成war文件并部署到Tomcat服务器,你需要进行以下步骤:
- 修改
pom.xml
,设置打包方式为war
:
<packaging>war</packaging>
- 添加
spring-boot-starter-tomcat
依赖,注释掉spring-boot-starter-web
中的Tomcat依赖:
<dependencies>
<!-- 注释掉spring-boot-starter-web,因为它包含了内嵌的Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
-->
<!-- 添加spring-boot-starter-tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
...
</dependencies>
- 创建
ServletInitializer
类继承自SpringBootServletInitializer
,并重写configure
方法:
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
}
- 在你的
Application
类中,确保没有@SpringBootApplication
注解中包含exclude
属性的EmbeddedServletContainerFactory
:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
@ServletComponentScan // 如果你使用了Servlet, Filter, or ServletContextInitializer beans
public class YourApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
- 确保你的应用中没有内嵌的Tomcat配置,例如不要在配置中指定
server.port
,因为Tomcat服务器会提供这个端口。 - 使用Maven打包你的应用:
mvn clean package
- 将生成的
war
文件部署到Tomcat服务器。
常见的错误处理方法:
- 确保
ServletInitializer
类在正确的包路径下,并且被Spring Boot扫描到。 - 检查
pom.xml
中是否正确设置了打包方式和依赖。 - 如果部署到Tomcat后应用无法启动,检查是否有日志提示特定错误,根据错误信息进行调试。
- 确保没有同时配置内嵌Tomcat和外部Tomcat的属性,例如
server.port
。 - 确保你的应用中没有同时配置内嵌数据源和外部数据源的属性。
注意:在实际部署时,可能需要根据具体的S
评论已关闭