云计算百科
云计算领域专业知识百科平台

关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明

以下是关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明:


一、Maven 打包命令详解


1. 基础命令

1.1 清理并打包

mvn clean package

  • clean:删除 target 目录中的旧构建文件。
  • package:根据 pom.xml 中的 <packaging> 配置生成 JAR 或 WAR 文件。

2. 指定打包类型

2.1 打包 JAR

默认为 JAR,无需额外配置:

mvn clean package

2.2 打包 WAR

需在 pom.xml 中设置 <packaging>war</packaging>:

mvn clean package


3. 指定内嵌服务器

3.1 内嵌 Tomcat(默认)

无需额外配置,Spring Boot 默认使用内嵌 Tomcat。

3.2 更换内嵌服务器(如 Jetty)

在 pom.xml 中排除 Tomcat 并添加 Jetty 依赖:

<!– 排除 Tomcat –>
<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>

<!– 添加 Jetty –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>


二、JAR 包与 WAR 包对比


1. JAR 包

特点

  • 内嵌服务器:包含 Tomcat/Jetty 等内嵌服务器,无需外部容器。
  • 独立运行:通过 java -jar app.jar 直接启动。
  • 轻量级:打包后体积较小,适合微服务、独立应用。

配置

  • 默认打包类型:<packaging>jar</packaging>

启动命令

java -jar app.jar


2. WAR 包

特点

  • 依赖外部容器:需部署到 Tomcat、Jetty 等外部容器。
  • 传统企业应用:适合与现有 Java EE 环境集成。
  • 需排除内嵌服务器:需在 pom.xml 中排除内嵌 Tomcat。

配置

  • 设置打包类型为 WAR:

    <packaging>war</packaging>

  • 排除内嵌 Tomcat:

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

  • 继承 SpringBootServletInitializer:

    @SpringBootApplication
    public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(Application.class);
    }
    }

  • 部署到 Tomcat

  • 将生成的 app.war 复制到 Tomcat 的 webapps 目录。
  • 启动 Tomcat,访问 http://localhost:8080/app。

  • 对比表

    特性JAR 包WAR 包
    内嵌服务器 默认包含(如 Tomcat) 需排除内嵌服务器,依赖外部容器
    启动方式 java -jar app.jar 部署到 Tomcat/Jetty 等容器
    适用场景 微服务、独立应用 传统企业应用、需与现有容器集成
    依赖管理 自动包含所有依赖 需确保外部容器兼容依赖版本
    部署复杂度 简单,无需额外配置 需配置外部容器

    三、内嵌服务器与第三方服务器对比


    1. 内嵌服务器(如 Tomcat)

    优点

    • 快速启动:无需部署到外部容器,直接运行 JAR/WAR。
    • 开发便捷:适合本地开发和轻量级部署。
    • 配置简单:通过 application.properties 配置端口、上下文路径等。

    配置示例

    # application.properties
    server.port=8080
    server.servlet.context-path=/api


    2. 第三方服务器(如 Tomcat)

    优点

    • 资源管理:集中管理多个应用,便于资源分配。
    • 企业级功能:支持负载均衡、SSL、集群等高级功能。
    • 兼容性:与传统 Java EE 环境无缝集成。

    部署步骤

  • 打包 WAR 文件:

    mvn clean package

  • 部署到 Tomcat:

    • 将 target/app.war 复制到 Tomcat 的 webapps 目录。
    • 启动 Tomcat,应用自动解压部署。

  • 对比表

    特性内嵌服务器第三方服务器(如 Tomcat)
    启动方式 java -jar app.jar 部署到 Tomcat/Jetty 等容器
    资源占用 每个应用独立 JVM,可能冗余 共享容器资源,利用率更高
    适用场景 开发测试、轻量级部署 企业生产环境、需集中管理资源
    配置复杂度 简单,通过 Spring 配置文件 需配置 Tomcat 的 server.xml 等文件

    四、热部署(Hot Deployment)详解


    1. 热部署工具

    Spring Boot 推荐使用 Spring DevTools 实现热部署,无需重启应用即可更新代码。


    2. 配置步骤

    1. 添加依赖

    在 pom.xml 中添加:

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    </dependency>

    2. 配置文件设置

    2.1 application.properties

    # 启用热部署
    spring.devtools.restart.enabled=true

    # 排除不需要监控的目录(如日志、资源文件)
    spring.devtools.restart.exclude=logs/**,static/**,public/**

    # 自定义监控的额外路径(如配置文件)
    spring.devtools.restart.additional-paths=src/main/resources

    # 监控文件变化的间隔(毫秒)
    spring.devtools.restart.poll-interval=500

    # 忽略的文件模式(正则表达式)
    spring.devtools.restart.exclude-patterns=.*\\\\.tmp

    2.2 application.yml

    spring:
    devtools:
    restart:
    enabled: true
    exclude: logs/,METAINF/maven/
    additional-paths: src/main/resources
    poll-interval: 500
    exclude-patterns:
    .*\\\\.tmp


    3. 关键配置项说明

    配置项作用
    spring.devtools.restart.enabled 启用或禁用热部署,默认为 true。
    spring.devtools.restart.exclude 排除监控的目录或文件(支持通配符,如 logs/**)。
    spring.devtools.restart.additional-paths 添加额外需要监控的目录(如配置文件目录)。
    spring.devtools.restart.poll-interval 检测文件变化的间隔时间(毫秒),默认 1000。
    spring.devtools.restart.exclude-patterns 通过正则表达式排除特定文件模式(如临时文件)。
    spring.devtools.livereload.enabled 启用 LiveReload(前端页面自动刷新,需安装浏览器插件)。

    4. 注意事项

    • 作用域设置:确保 spring-boot-devtools 的作用域为 runtime,避免打包到生产环境。
    • IDE 配置:
      • IntelliJ IDEA:勾选 Build Project Automatically。
      • Eclipse:启用自动构建(Project → Build Automatically)。

    5. 热部署工作原理

  • 监控文件变化:DevTools 监控 target/classes 目录的更改。
  • 自动重启应用:当类文件或资源变化时,触发应用重启(仅重启应用,不重启 JVM)。
  • 快速反馈:开发时无需手动重启,节省时间。

  • 五、总结

    场景推荐方案原因
    开发测试 JAR + Spring DevTools 热部署方便,独立运行无需配置容器
    生产部署 JAR(内嵌服务器)或 WAR(Tomcat) JAR 灵活轻量,WAR 适合企业级容器管理
    企业级容器管理 WAR + Tomcat 集中管理资源,支持高级功能

    通过合理选择打包方式和热部署配置,可以显著提升开发效率和部署灵活性。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!