Springboot打war包,发布到tomcat

本文详细介绍如何将SpringBoot项目打包成WAR文件,并部署到Tomcat服务器上。主要步骤包括:修改启动类继承SpringBootServletInitializer,配置pom.xml文件为WAR打包方式,排除tomcat依赖或设置其为provided范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot打war包,发布到tomcat

1、启动类继承SpringBootServletInitializer,重写configure方法

@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {

	@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    	// 设置启动类,用于外部tomcat运行入口
        return application.sources(AdminApplication.class);
    }
	
	public static void main(String[] args) {
		SpringApplication.run(AdminApplication.class, args);
	}

}

2、pom文件中将项目打包方式设置为war

<packaging>war</packaging>

3、pom文件中找到starter-web引用,去除tomcat

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<!-- 此处排除tomcat jar包 -->
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>

或者scope设置为provided

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
</dependency>

补充:scope值
compile (编译范围)
compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。

provided (已提供范围)
provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

runtime (运行时范围)
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

test (测试范围)
test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。比较典型的如junit。

system (系统范围)
system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

Spring Boot 通常用于创建独立的、生产级别的基于Spring的应用程序,其默认方式是打成一个可执行的jar。然而,有时候出于特定的生产环境需求,我们需要将Spring Boot应用打war并部署到外部的Tomcat服务器上。以下是一个基本的步骤说明: 1. **排除内置的Tomcat依赖**:在你的pom.xml文件中,需要将Spring Boot的内嵌Tomcat依赖设置为scope为provided,这样在打的时候就不会将Tomcatwar内。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` 2. **修改启动类**:让Spring Boot的启动类继承`SpringBootServletInitializer`,并重写`configure`方法,这样做是为了让Spring Boot应用能够在外部的Tomcat容器中正常启动。 ```java @SpringBootApplication public class MyApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyApplication.class); } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 3. **打应用**:使用Maven或Gradle命令将应用打war。对于Maven,通常使用`mvn clean package`命令。 4. **部署war**:将生成的war文件复制到Tomcat的`webapps`目录下。 5. **启动Tomcat**:启动Tomcat服务器,如果一切顺利,你的Spring Boot应用将作为应用上下文被部署到Tomcat中,并可以通过配置的端口和路径访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值