Spring Boot应用部署

作者: bsfc | 来源:发表于2024-04-23 11:30 被阅读0次

    JAR包部署

    Spring Boot应用部署采用打包成JAR文件的方式,旨在利用其内置的嵌入式Tomcat或其他Servlet容器,简化传统Web应用部署流程。以下是详细的步骤和说明:

    1. 使用Maven或Gradle进行打包

    Maven

    在Spring Boot项目中,确保pom.xml文件已经包含了Spring Boot Maven插件。如果未添加,需添加如下配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    

    然后在命令行或IDE中执行打包命令:

    mvn clean package
    

    这将清理旧的构建产物,编译项目,执行测试(如果有),并最终打包成一个可执行的JAR文件。生成的JAR通常位于target目录下,文件名格式为your-project-name-<version>.jar

    Gradle

    对于Gradle项目,确保在build.gradle文件中已配置了Spring Boot Gradle插件。如果没有,请添加如下内容:

    plugins {
        id 'org.springframework.boot' version '...' // 使用合适的Spring Boot版本
        id 'io.spring.dependency-management' version '...' // 可选,用于管理依赖版本
        // 其他插件...
    }
    
    // 如果使用Kotlin DSL
    plugins {
        id("org.springframework.boot") version "..." // 使用合适的Spring Boot版本
        id("io.spring.dependency-management") version "..." // 可选,用于管理依赖版本
        // 其他插件...
    }
    

    执行打包命令:

    ./gradlew clean build
    

    这将完成同样的清理、编译、测试和打包过程,生成的JAR文件同样位于build/libs目录下,文件名类似your-project-name-<version>.jar

    2. 打包类型

    Spring Boot应用默认被打包为“fat JAR”或“über JAR”,这种类型的JAR不仅包含了项目的字节码,还包含了所有依赖库以及嵌入式Servlet容器(如Tomcat)。这意味着一个单一的JAR文件就包含了应用运行所需的所有组件,无需在目标环境中预先安装或配置Servlet容器。

    3. 部署JAR文件

    本地部署

    要运行打包好的JAR文件,只需在命令行中使用java -jar命令:

    java -jar target/your-project-name-<version>.jar
    # 或者对于Gradle项目
    java -jar build/libs/your-project-name-<version>.jar
    

    根据需要,可以指定各种运行参数、环境变量或配置文件位置。例如:

    java -Dserver.port=8081 -jar your-project-name.jar --spring.config.location=file:/path/to/application.properties
    

    远程服务器部署

    将生成的JAR文件上传到目标服务器,通常放置在合适的应用部署目录下。然后通过SSH登录服务器,执行与本地相同的方式启动应用:

    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镜像,并且可能还需要在Maven或Gradle构建脚本中集成Docker插件以简化构建过程。以下是详细的步骤:

    1. 创建Dockerfile

    在Spring Boot项目的根目录下创建一个名为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"]
    

    这里的my-spring-boot-app.jar是您构建得到的WAR文件名,请将其替换为您实际的WAR文件名。使用的Java基础镜像是AdoptOpenJDK 11(可替换为您所需的Java版本),并且假设应用监听在端口8080。

    2. 构建WAR文件

    确保已经按照之前的指导将项目配置为WAR打包,并通过Maven或Gradle构建工具生成WAR文件:

    Maven

    mvn clean package
    

    Gradle

    ./gradlew clean build
    

    3. 构建Docker镜像

    在项目根目录下(含有Dockerfile)执行以下命令构建Docker镜像:

    docker build -t my-spring-boot-app:latest .
    

    这里my-spring-boot-app是您自定义的镜像名,:latest是标签。构建完成后,您将拥有一个名为my-spring-boot-app:latest的Docker镜像。

    4. 运行Docker容器

    使用以下命令启动Docker容器:

    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和端口访问应用。
    • my-spring-boot-app:latest:使用的镜像名及标签。

    5. 访问应用

    容器启动后,您可以通过以下URL访问您的Spring Boot应用:

    http://localhost:8080
    

    WAR包部署

    将Spring Boot应用部署为WAR包并部署到外部Tomcat服务器上,需要进行一些特定的配置和步骤。以下是详细说明:

    1. 修改打包方式

    在项目的构建工具配置文件中(通常是pom.xml for Maven或build.gradle for Gradle),将打包方式改为war。以下是两种构建工具的具体示例:

    Maven

    pom.xml中的<packaging>标签设置为war

    <project>
        <!-- ... -->
        <packaging>war</packaging>
        <!-- ... -->
    </project>
    

    Gradle

    build.gradle中设置apply plugin: 'war'并确认bootWar任务被启用:

    plugins {
        id 'org.springframework.boot' version '...' // 使用合适的Spring Boot版本
        id 'io.spring.dependency-management' version '...' // 可选,用于管理依赖版本
        id 'war' // 添加war插件
    }
    
    // 如果使用Kotlin DSL
    plugins {
        id("org.springframework.boot") version "..." // 使用合适的Spring Boot版本
        id("io.spring.dependency-management") version "..." // 可选,用于管理依赖版本
        id("war") // 添加war插件
    }
    

    2. 排除内置Tomcat

    为了防止与外部Tomcat服务器产生冲突,需要在构建配置中排除Spring Boot的内嵌Tomcat依赖。在Maven的pom.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>
    

    对于Gradle,在dependencies块中使用exclude关键字:

    dependencies {
        implementation('org.springframework.boot:spring-boot-starter-web') {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
        }
        // ...
    }
    

    3. 配置SpringBootServletInitializer

    为了让Spring Boot应用能够由外部Servlet容器如Tomcat加载,需要创建一个继承自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(Application.class);
        }
    
    }
    

    这里Application.class是您的主应用程序类,包含@SpringBootApplication注解。

    4. 构建WAR文件

    使用对应的构建工具命令生成WAR包:

    Maven

    mvn clean package
    

    生成的WAR文件通常位于target目录下,文件名为your-project-name-<version>.war

    Gradle

    ./gradlew clean build
    

    生成的WAR文件位于build/libs目录下,文件名为your-project-name-<version>.war

    5. 部署到Tomcat

    将生成的WAR文件复制到Tomcat的webapps目录下。如果您正在运行Tomcat服务,它会自动检测到新部署的WAR文件并进行解压及部署。如果您尚未启动Tomcat,启动后它同样会处理新部署的WAR文件。

    6. 访问应用

    部署完成后,您可以使用以下URL访问您的Spring Boot应用:

    http://localhost:8080/your-project-name
    

    这里的your-project-name通常对应WAR文件的基础名称(不带版本号)。如果在部署过程中更改了上下文路径,访问URL应相应调整。

    相关文章

      网友评论

        本文标题:Spring Boot应用部署

        本文链接:https://www.haomeiwen.com/subject/fjtwxjtx.html