主题
Spring Boot 部署
Spring Boot 应用有多种部署方式,包括 JAR 包部署、WAR 包部署和 Docker 部署。本文将详细介绍这些部署方式。
JAR 包部署
Spring Boot 应用部署采用打包成 JAR 文件的方式,旨在利用其内置的嵌入式 Tomcat 或其他 Servlet 容器,简化传统 Web 应用部署流程。
1. 使用 Maven 进行打包
在 Spring Boot 项目中,确保 pom.xml 文件已经包含了 Spring Boot Maven 插件。如果未添加,需添加如下配置:
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>然后在命令行或 IDE 中执行打包命令:
bash
mvn clean package这将清理旧的构建产物,编译项目,执行测试(如果有),并最终打包成一个可执行的 JAR 文件。生成的 JAR 通常位于 target 目录下,文件名格式为 your-project-name-<version>.jar。
2. 打包类型
Spring Boot 应用默认被打包为"fat JAR"或"über JAR",这种类型的 JAR 不仅包含了项目的字节码,还包含了所有依赖库以及嵌入式 Servlet 容器(如 Tomcat)。这意味着一个单一的 JAR 文件就包含了应用运行所需的所有组件,无需在目标环境中预先安装或配置 Servlet 容器。
3. 部署 JAR 文件
本地部署
要运行打包好的 JAR 文件,只需在命令行中使用 java -jar 命令:
bash
java -jar target/your-project-name-<version>.jar根据需要,可以指定各种运行参数、环境变量或配置文件位置。例如:
bash
java -Dserver.port=8081 -jar your-project-name.jar --spring.config.location=file:/path/to/application.properties远程服务器部署
将生成的 JAR 文件上传到目标服务器,通常放置在合适的应用部署目录下。然后通过 SSH 登录服务器,执行与本地相同的方式启动应用:
bash
ssh user@remote-server
cd /path/to/deployment/directory
java -jar your-project-name.jar确保服务器上已安装了兼容的 Java 运行环境(JRE 或 JDK),且版本与项目构建时使用的 Java 版本相符。
JAR 包 Docker 部署
要使用 Docker 部署 Spring Boot 应用,您需要创建一个 Dockerfile 来定义如何构建 Docker 镜像。
1. 创建 Dockerfile
在 Spring Boot 项目的根目录下创建一个名为 Dockerfile 的文件,内容如下:
dockerfile
# 使用官方的Java基础镜像作为基础环境
FROM adoptopenjdk:11-jre-hotspot
# 设置环境变量(可根据实际需求调整)
ENV SPRING_PROFILES_ACTIVE=prod
ENV SERVER_PORT=8080
# 设置工作目录
WORKDIR /app
# 复制应用所需的文件到容器中
COPY target/my-spring-boot-app.jar app.jar
# 声明应用运行时需要暴露的端口
EXPOSE 8080
# 定义容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "app.jar"]2. 构建 Docker 镜像
在项目根目录下(含有 Dockerfile)执行以下命令构建 Docker 镜像:
bash
docker build -t my-spring-boot-app:latest .3. 运行 Docker 容器
使用以下命令启动 Docker 容器:
bash
docker run -d --name my-running-app -p 8080:8080 my-spring-boot-app:latest参数解释:
-d:在后台运行容器。--name my-running-app:为容器指定一个名称。-p 8080:8080:将主机的 8080 端口映射到容器的 8080 端口,使得外部可以通过主机 IP 和端口访问应用。
WAR 包部署
将 Spring Boot 应用部署为 WAR 包并部署到外部 Tomcat 服务器上,需要进行一些特定的配置和步骤。
1. 修改打包方式
在项目的构建工具配置文件中(通常是 pom.xml for Maven 或 build.gradle for Gradle),将打包方式改为 war。
Maven
在 pom.xml 中的 <packaging> 标签设置为 war:
xml
<project>
<!-- ... -->
<packaging>war</packaging>
<!-- ... -->
</project>2. 排除内置 Tomcat
为了防止与外部 Tomcat 服务器产生冲突,需要在构建配置中排除 Spring Boot 的内嵌 Tomcat 依赖。在 Maven 的 pom.xml 中添加以下依赖排除:
xml
<dependencies>
<!-- ... -->
<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>
</exclusions>
</dependency>
<!-- ... -->
</dependencies>3. 配置 SpringBootServletInitializer
为了让 Spring Boot 应用能够由外部 Servlet 容器如 Tomcat 加载,需要创建一个继承自 SpringBootServletInitializer 的类,并重写 configure 方法:
java
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(Application.class);
}
}这里 Application.class 是您的主应用程序类,包含 @SpringBootApplication 注解。
4. 构建 WAR 文件
使用对应的构建工具命令生成 WAR 包:
bash
mvn clean package生成的 WAR 文件通常位于 target 目录下,文件名为 your-project-name-<version>.war。
5. 部署到 Tomcat
将生成的 WAR 文件复制到 Tomcat 的 webapps 目录下。如果您正在运行 Tomcat 服务,它会自动检测到新部署的 WAR 文件并进行解压及部署。
6. 访问应用
部署完成后,您可以使用以下 URL 访问您的 Spring Boot 应用:
http
http://localhost:8080/your-project-name总结
Spring Boot 提供了灵活的部署选项,可以根据实际需求选择 JAR 包部署、WAR 包部署或 Docker 容器部署。每种方式都有其适用场景,选择合适的部署方式可以提高应用的部署效率和运行稳定性。