为了账号安全,请及时绑定邮箱和手机立即绑定

SpringBoot应用的生产发布教程

概述

本文详细介绍了SpringBoot应用的生产发布教程,涵盖了项目构建、依赖管理、配置文件编写、打包发布及部署流程。文章进一步讲解了如何使用Docker进行容器化发布,并提供了在Linux服务器上部署和使用云服务提供商部署的具体步骤。此外,还介绍了如何配置日志框架和使用监控工具来监控应用。

SpringBoot项目构建与依赖管理

使用IDE创建SpringBoot项目

Spring Boot 提供了多种方式来创建项目,包括但不限于 IntelliJ IDEA 和 Eclipse。这里以 IntelliJ IDEA 为例:

  1. 打开 IntelliJ IDEA,选择 "File" -> "New" -> "Project"。
  2. 在弹出的窗口中选择 "Spring Initializr",然后点击 "Next"。
  3. 在 "Group ID" 和 "Artifact ID" 字段中输入项目名称。例如,"Group ID" 填写 "com.example","Artifact ID" 填写 "my-springboot-app"。
  4. 选择 JDK 版本。
  5. 继续填充项目信息,选择 Spring Boot 版本和依赖项。例如,选择 "Web" 依赖来创建一个 Web 应用。
  6. 点击 "Next",然后点击 "Finish"。

创建项目后,IntelliJ IDEA 会自动下载并配置项目依赖。

使用Eclipse创建SpringBoot项目

在Eclipse中,同样可以通过Spring Initializr插件来创建Spring Boot项目:

  1. 打开Eclipse,选择 "File" -> "New" -> "Spring Starter Project"。
  2. 在弹出窗口中输入 "Group ID" 和 "Artifact ID",例如 "Group ID" 填写 "com.example","Artifact ID" 填写 "my-springboot-app"。
  3. 选择需要的依赖,例如 "Web"。
  4. 点击 "Next",然后点击 "Finish"。

添加必要的依赖

在 Spring Boot 项目中,可以通过 pom.xml 文件(Maven 项目)或 build.gradle 文件(Gradle 项目)来添加依赖。这里以 Maven 项目为例:

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- JPA 数据库访问 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- MySQL连接 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Spring Boot Test for unit testing -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle 依赖配置示例

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

配置SpringBoot应用

配置文件的编写(application.properties/application.yml)

Spring Boot 应用默认支持 application.propertiesapplication.yml 两种配置文件格式。这里以 application.yml 为例:

spring:
  application:
    name: my-springboot-app
    version: 1.0.0
  profiles:
    active: prod

server:
  port: 8080
  address: 0.0.0.0

logging:
  level:
    root: INFO
    org.springframework.web: DEBUG

application.properties 配置示例

spring.application.name=my-springboot-app
spring.application.version=1.0.0
spring.profiles.active=prod

server.port=8080
server.address=0.0.0.0

logging.level.root=INFO
logging.level.org.springframework.web=DEBUG

数据库连接配置

数据库连接配置需要在 application.yml 文件中添加相应的配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

MongoDB 数据库连接配置示例

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/mydb
应用打包与发布准备

打包成可执行的jar包

在 IntelliJ IDEA 或 Eclipse 中,可以通过 maven 插件或 Gradle 插件进行打包。这里以 Maven 为例:

运行以下命令:

mvn clean package

这会生成一个 target 文件夹,其中包含了打包好的 my-springboot-app-1.0.0.jar 文件。

使用Docker进行容器化发布

首先,需要编写 Dockerfile 文件进行 Docker 镜像的构建。Dockerfile 的基本结构如下:

# 使用官方的Java运行时环境作为基础镜像
FROM openjdk:11-jre-slim
# 将工作目录设置为 /app
WORKDIR /app
# 将打包好的jar包复制到镜像中
COPY target/my-springboot-app-1.0.0.jar /app/application.jar
# 设置容器启动时的默认命令
ENTRYPOINT ["java", "-jar", "/app/application.jar"]

复杂Dockerfile示例

FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/my-springboot-app-1.0.0.jar /app/application.jar
ENV APP_LOG_LEVEL=INFO
EXPOSE 8080
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-Dlog.level=${APP_LOG_LEVEL}", "-jar", "/app/application.jar"]

构建 Docker 镜像:

docker build -t my-springboot-app:1.0.0 .
部署SpringBoot应用

在Linux服务器上部署

将打包好的jar包上传到服务器

  1. 将打包好的 jar 包上传到 Linux 服务器上。
  2. 设置 jar 包可执行权限:
chmod +x my-springboot-app-1.0.0.jar
  1. 运行 jar 包:
java -jar my-springboot-app-1.0.0.jar

可以通过 nohup 命令来实现后台运行:

nohup java -jar my-springboot-app-1.0.0.jar &

使用systemd进行服务化管理

编写一个 systemd 服务文件 my-springboot-app.service

[Unit]
Description=My SpringBoot Application
After=syslog.target
After=network.target

[Service]
User=your-user
ExecStart=/usr/bin/java -jar /path/to/my-springboot-app-1.0.0.jar
SuccessExitStatus=143
Restart=on-failure

[Install]
WantedBy=multi-user.target

将服务文件拷贝到 /etc/systemd/system/ 目录下,并启动服务:

systemctl start my-springboot-app.service
systemctl enable my-springboot-app.service

使用云服务提供商部署

在阿里云上部署

阿里云提供了包括云服务器(ECS)、容器服务(ASK)、函数计算(FC)等服务。这里以 ECS 为例:

  1. 登录阿里云,进入 ECS 控制台。
  2. 创建一个新的 ECS 实例。
  3. 将打包好的 jar 包上传到 ECS 实例。
  4. 使用上面提到的 systemd 或直接运行 jar 包的方法部署应用。
  5. 配置安全组规则允许外部访问。

阿里云自动化部署示例

可以使用阿里云的CI/CD工具来实现自动化部署:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - mvn clean package
  artifacts:
    paths:
      - target/*.jar

deploy:
  stage: deploy
  script:
    - ssh user@your-server "cd /path/to/app && nohup java -jar target/my-springboot-app-1.0.0.jar &"
  only:
    - master

在腾讯云上部署

腾讯云提供了云服务器(CVM)、容器服务(TKE)、函数计算(TSF)等服务。这里以 CVM 为例:

  1. 登录腾讯云,进入 CVM 控制台。
  2. 创建一个新的 CVM 实例。
  3. 将打包好的 jar 包上传到 CVM 实例。
  4. 使用上面提到的 systemd 或直接运行 jar 包的方法部署应用。
  5. 配置安全组规则允许外部访问。

腾讯云自动化部署示例

可以使用腾讯云的CI/CD工具来实现自动化部署:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - mvn clean package
  artifacts:
    paths:
      - target/*.jar

deploy:
  stage: deploy
  script:
    - ssh user@your-server "cd /path/to/app && nohup java -jar target/my-springboot-app-1.0.0.jar &"
  only:
    - master
应用监控与日志管理

配置日志框架(如Logback)

Spring Boot 默认使用 Logback 作为日志框架。可以通过 application.yml 文件来配置 Logback:

logging:
  file:
    name: ./logs/my-springboot-app.log
  level:
    root: INFO
    org.springframework.web: DEBUG

还可以配置 Logback 的 logback-spring.xml 文件,例如:

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
    </encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>./logs/my-springboot-app.log</file>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>./logs/my-springboot-app.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

使用 Log4j2 配置日志框架

<Configuration>
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss} %p %m%n"/>
    </Console>
    <RollingFile name="RollingFile" fileName="logs/my-springboot-app.log"
                 filePattern="logs/my-springboot-app-%d{yyyy-MM-dd}.log">
      <PatternLayout pattern="%d{HH:mm:ss} %p %m%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy/>
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

使用监控工具(如Prometheus)

Prometheus 是一个开源的监控和报警工具。首先安装 Prometheus 和 Grafana:

wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz
tar xvf prometheus-2.30.0.linux-amd64.tar.gz
cd prometheus-2.30.0.linux-amd64
./prometheus --config.file=prometheus.yml

Prometheus 与 Grafana 集成

prometheus.yml 文件中添加 Spring Boot 应用的监控地址:

scrape_configs:
  - job_name: 'springboot-app'
    static_configs:
      - targets: ['localhost:8080']

Spring Boot 应用需要启用 Actuator 来提供监控接口:

mvn clean package -Dspring-boot.run.profiles=prod

pom.xml 中添加 Actuator 依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
</dependencies>

application.yml 中启用 Actuator:

management:
  endpoints:
    web:
      exposure:
        include: '*'
应用的维护与更新

版本控制

Spring Boot 项目通常使用 Git 进行版本控制。创建一个新的 Git 仓库:

git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/yourusername/your-repo.git
git push -u origin master

更新部署流程

手动更新

  1. 提交代码更新。
  2. 在本地进行打包测试。
  3. 将新版本的 jar 包上传到生产环境。
  4. 停止旧版本服务,启动新版本服务。

自动化部署

可以使用 CI/CD 工具如 Jenkins 或 GitLab CI 进行自动化部署。例如,配置 GitLab CI 进行部署:

在项目根目录下添加 .gitlab-ci.yml 文件:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - mvn clean package
  artifacts:
    paths:
      - target/*.jar

deploy:
  stage: deploy
  script:
    - ssh user@your-server "cd /path/to/app && nohup java -jar target/my-springboot-app-1.0.0.jar &"
  only:
    - master

这将自动构建和部署项目到指定服务器,大大简化了手动部署流程。

通过以上步骤,可以有效地构建、配置、打包、部署和监控 Spring Boot 应用,并对其进行维护和更新。希望这些内容能帮助你更好地掌握 Spring Boot 应用的生产发布流程。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消