SpringBoot后端服务部署实战
前言
这是我完成的第一个基于Java技术栈的后端开发项目,整合了SpringBoot框架和Mybatis持久层框架。
目前项目已完成基础功能开发并部署上线,测试地址为:https://mall.cngo.xyz/
一、项目结构
1 |
|
项目JDK版本为1.8,故需要在
system.properties
中设置java.runtime.version=8
二、MySQL服务集成
修改application.properties中配置的Mysql服务配置
1 |
|
推荐使用sqlpub.com等云数据库服务
三、项目构建
云引擎默认的构建命令为mvn package --batch-mode
,项目为SpringBoot项目,构建完后报错
no main manifest attribute, in test-0.0.1-SNAPSHOT.jar
原因是找不到主类java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
jar包中缺少相关依赖
1.配置Spring Boot打包插件
1 |
|
2.修改构建命令
1 |
|
现在生成的
miaosha-1.0-SNAPSHOT.jar
就可以独立运行了。
四、项目运行
修改运行命令为
1
2
3java -jar /home/leanengine/app/target/miaosha-1.0-SNAPSHOT.jar \
--server.port=${LEANCLOUD_APP_PORT} \ # 必须读取环境变量端口
--server.address=0.0.0.0 # 监听所有网卡!避坑指南
- 云引擎强制要求监听
0.0.0.0
而非127.0.0.1
,SpringBoot框架默认是127.0.0.1
LEANCLOUD_APP_PORT
是平台动态分配的HTTP端口,云引擎会监听该端口是否有http服务
- 云引擎强制要求监听
项目成功运行起来了❗
五、修复Bug
解决跨域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