SpringBoot打包与部署jar与war
SpringBoot 支持 JAR 和 WAR 两种部署方式。
JAR vs WAR对比
| 对比项 | JAR | WAR |
|---|---|---|
| 容器 | 内嵌Tomcat | 外部Tomcat |
| 启动 | java -jar | 部署到Tomcat |
| 结构 | 可执行包 | Web应用包 |
| 适用 | 微服务、云原生 | 传统部署、共享容器 |
JAR打包配置
XML
<project>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Bash
# 打包
mvn clean package
# 运行
java -jar target/my-app.jar
WAR打包配置
修改pom.xml
XML
<project>
<!-- 修改打包类型 -->
<packaging>war</packaging>
<!-- 标记内嵌容器为provided -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 本地开发保留,部署时排除 -->
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>my-app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
继承SpringBootServletInitializer
Java
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
WAR打包命令
Bash
mvn clean package
# 输出: target/my-app.war
WAR部署步骤
1. Tomcat配置
XML
<!-- tomcat/conf/server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2. 部署WAR
XML
# 复制WAR到webapps目录
cp my-app.war $TOMCAT_HOME/webapps/
# Tomcat自动解压并部署
# 访问: http://localhost:8080/my-app/
3. 配置context路径
dockerfile
<!-- tomcat/conf/Catalina/localhost/my-app.xml -->
<Context docBase="/path/to/my-app.war" path="/myapp" />
选择依据
| 场景 | 推荐 |
|---|---|
| 微服务架构 | JAR |
| Docker容器部署 | JAR |
| 多应用共享容器 | WAR |
| 传统运维环境 | WAR |
| 快速开发测试 | JAR |
Docker部署JAR
Bash
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY my-app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
dockerfile
docker build -t my-app .
docker run -p 8080:8080 my-app
Docker部署WAR
Java
FROM tomcat:9-jdk17
COPY my-app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
同时支持两种方式
text
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
// WAR部署入口
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
// JAR运行入口
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
main方法用于JAR运行,configure方法用于WAR部署。
要点总结
- JAR内嵌容器,适合微服务
- WAR部署外部容器,适合传统环境
- WAR需继承SpringBootServletInitializer
- spring-boot-starter-web设为provided
- Docker推荐JAR方式部署
📝 发现内容有误?点击此处直接编辑