SpringBoot后端服务部署实战

前言

这是我完成的第一个基于Java技术栈的后端开发项目,整合了SpringBoot框架和Mybatis持久层框架。

目前项目已完成基础功能开发并部署上线,测试地址为:https://mall.cngo.xyz/

一、项目结构

1
2
3
4
5
6
7
8
9
project/
├── src/
│ └── main/
│ ├── java/com/miaoshaproject # java源码
│ └── resources/
│ └── application.properties # SpringBoot应用程序配置文件
├── pom.xml # Maven依赖管理
├── leanignore.txt # 云引擎忽略文件
└── system.properties # 云引擎配置文件

项目JDK版本为1.8,故需要在system.properties中设置java.runtime.version=8

二、MySQL服务集成

修改application.properties中配置的Mysql服务配置

1
2
3
4
spring.datasource.name=miaosha
spring.datasource.url=${DB_URL} # 从环境变量读取,在云引擎官网配置
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

推荐使用sqlpub.com等云数据库服务

三、项目构建

云引擎默认的构建命令为mvn package --batch-mode,项目为SpringBoot项目,构建完后报错

  1. no main manifest attribute, in test-0.0.1-SNAPSHOT.jar 原因是找不到主类
  2. java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication jar包中缺少相关依赖

1.配置Spring Boot打包插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- Spring Boot 打包插件 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.5.RELEASE</version> <!-- 使用你的 Spring Boot 版本 -->
<configuration>
<mainClass>com.miaoshaproject.App</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 将普通 JAR 重新打包为可执行 JAR -->
</goals>
</execution>
</executions>
</plugin>
</plugins>

2.修改构建命令

1
2
# 三步合一命令(清理+打包+重打包)
mvn clean package spring-boot:repackage

现在生成的miaosha-1.0-SNAPSHOT.jar就可以独立运行了。

四、项目运行

  1. 修改运行命令为

    1
    2
    3
    java -jar /home/leanengine/app/target/miaosha-1.0-SNAPSHOT.jar \
    --server.port=${LEANCLOUD_APP_PORT} \ # 必须读取环境变量端口
    --server.address=0.0.0.0 # 监听所有网卡!
  2. 避坑指南

    • 云引擎强制要求监听0.0.0.0而非127.0.0.1,SpringBoot框架默认是127.0.0.1
    • LEANCLOUD_APP_PORT是平台动态分配的HTTP端口,云引擎会监听该端口是否有http服务

项目成功运行起来了❗

五、修复Bug

  1. 解决跨域Cookie丢失

    为了减轻云引擎的压力,采用了前后端分离部署方式,但是由于前后端域名不一致,存在跨域Cookie丢失问题,无法在Cookie中保存用户的登陆信息

    解决方法:在登录接口(/login)中,增加代码设置SameSite=None

    1
    2
    3
    4
    5
    6
    // 设置SameSite=None的Cookie - 兼容旧版Servlet API的方式
    if (httpServletResponse != null) {
    String sessionId = httpServletRequest.getSession().getId();
    String cookieValue = String.format("JSESSIONID=%s; Path=/; HttpOnly; Secure; SameSite=None", sessionId);
    httpServletResponse.addHeader("Set-Cookie", cookieValue);
    }

总结

通过这次部署,掌握了:

✅ Spring Boot可执行JAR的打包原理

✅ 云引擎的特殊要求与配置

✅ 跨域场景下Cookie的安全设置

✅ 外部数据库服务的快速接入


SpringBoot后端服务部署实战
https://blog.cngo.xyz/posts/c2c.html
作者
cngo
发布于
2025年4月3日
许可协议