SpringBoot 懒人部署法

💚

本文档适用于基于 MySQL + Spring Boot + Vue 架构的项目,使用 Maven 作为包管理服务,主要使用 IDEA + VS Code 开发

❤️

需要安装 Java8、Maven3.X、Node10、Vue2、MySQL5.7

项目结构#

以下是一个典型的 SpringBoot 项目结构
主要是 main 文件夹下的 java 和 resources 文件夹
java 文件夹下是所有的 java 代码
resources 文件夹下的 application.yml
编译完成后的代码在文件夹 target下

Copy
├── README.md ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── imzhizi │ │ │ └── tdd │ │ │ ├── TddApplication.java │ │ │ ├── annotation │ │ │ │ └── CurrentUser.java │ │ │ ├── config │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ ├── RedisPoolConfig.java │ │ │ │ └── WebConfig.java │ │ │ ├── domain │ │ │ │ ├── BusinessException.java │ │ │ │ ├── CodeMsg.java │ │ │ │ ├── Result.java │ │ │ │ ├── dto │ │ │ │ │ ├── LoginDto.java │ │ │ │ │ └── RegisterDto.java │ │ │ │ ├── model │ │ │ │ │ ├── Role.java │ │ │ │ │ └── User.java │ │ │ │ └── vo │ │ │ │ └── UserVo.java │ │ │ ├── helper │ │ │ │ └── MD5Helper.java │ │ │ ├── repository │ │ │ │ ├── RedisRepo.java │ │ │ │ ├── UserRepo.java │ │ │ │ └── redis │ │ │ │ ├── KeyUser.java │ │ │ │ ├── OrderKey.java │ │ │ │ ├── RedisKey.java │ │ │ │ └── UserKey.java │ │ │ ├── security │ │ │ │ ├── AuthenticationInterceptor.java │ │ │ │ └── CurrentUserArgumentResolver.java │ │ │ ├── service │ │ │ │ └── UserService.java │ │ │ └── web │ │ │ ├── DoctorController.java │ │ │ └── UserController.java │ │ └── resources │ │ ├── application.yml │ │ └── log4j2.xml │ └── test ├── target │ └── tdd.jar └── tdd.iml

配置文件#

对于一个项目来说,为了能够同时在本地开发、同时在服务器上部署,这是它们的配置文件是不同的,因此需要保持多种配置的共存,方便在不同环境下切换。

以下展示的是一个常见的 application.yml 中的内容,会使用 spring: profiles: 定义不同的配置,一下就定义了 prod 和 test 两个 profiles,同时使用 spring: profiles: active: 来定义当前激活哪一个 profiles。

Copy
spring: profiles: active: test --- spring: profiles: shiyu datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/tdd?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false username: root password: 123456 thymeleaf: cache: false server: port: 8080 --- spring: profiles: prod datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:33061/tdd?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false username: root password: 123456 thymeleaf: cache: false server: port: 8080 logging: level: com.imzhizi.tdd: debug mybatis: type-aliases-package: com.imzhizi.tdd.domain.model configuration: map-underscore-to-camel-case: true default-fetch-size: 100 default-statement-timeout: 30

项目启动#

IDEA 启动#

可以直接运行 Application.java 文件中的main函数,此时所使用的 profiles 由 application.yml 所定义。

Maven 启动#

在一些情况下,不方便使用 IDEA 启动项目,可以直接在命令行。

Copy
mvn spring-boot:run -Dspring.profiles.active=test

项目编译#

前端部分#

💚

本部分讲述是一种将Vue前端托管在后端的方法,thymeleaf 项目可以直接略过该部分

首先需要将前端项目构建为dist项目,构建命令的执行方式取决于项目中 config/index.js 文件中的配置,建议作出以下修改。

Copy
assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: 'assets',

还需要将 config/env.prod.js 中的API地址配置为实际的服务器地址,例如 '"http://112.112.10.xxx"',记得需要单引号扩住双引号。

执行以下命令即可完成项目编译,默认情况下文件build后会在dist文件夹下,如上述配置所示,也可以按需要修改。

Copy
npm run build

完成以上两个步骤之后,会得到一个如图的文件夹

然后需要将该部分复制到后端的 resources 文件夹的 static 文件夹中

后端部分#

Java项目的 application.yml 配置

Java 项目使用 Maven 编译打包,具体命令如下:

Copy
# 直接编译 mvn install mvn package # 如果存在单元测试,希望在编译阶段跳过测试 mvn package -Dmaven.test.skip=true

经过这部分的操作,会得到一个 xxx.jar 的包,一般位于 target 文件夹中,如果未自行定义,则应该是类似于 xxx-1.0-SNAPSHOT.jar 的命名,通过在 pom.xml 文件中的 build 添加一下配置可以修改每次编译得到的文件名。

Copy
<build> <finalName>team</finalName> …… </build>

项目部署#

💚

在部署之前,需要实现准备好 MySQL,创建数据库表并导入数据,建议使用 utf8mb4 编码

从上一阶段编译得到的 jar 包可以在服务器上部署,一般通过 scp 或自行通过其他方式上传到服务器上

Copy
# 从本地将文件上传至服务器 scp target/team.jar gaomi@172.18.1.xxx:~ # 通过 java -jar 即可执行,但此时是前台运行 java -jar xxxx.jar --spring.profiles.active=prod # 因此需要使用 nohup 保持服务后台运行 ### 这是真正要用的命令 nohup java -jar xxxx.jar --spring.profiles.active=prod & ### 这是真正要用的命令 # 查看项目的运行情况 tail -f nohup.out

附录#

使用PM2管理项目#

PM2是一个更加现代的服务监控工具,使用 pm2 可以替代 nohup,具体用法可以参考我的博客 https://www.cnblogs.com/imzhizi/p/montior-jar-using-pm2.html

如果服务涉及到小程序或HTTPS#

由于小程序要求必须使用域名和HTTPS,因此后端也要做相应的配置,其中包括项目自身和 nginx,可以查看该文章 https://www.cnblogs.com/imzhizi/p/https-server-using-nginx.html

在 Docker 中使用MySQL#

如果想要使用 Docker 对MySQL 服务进行区隔,或者直接在服务器上安装MySQL遇到困难,可以参考 https://www.cnblogs.com/imzhizi/p/linux--mysqldocker-install.html

posted @   质子  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示
CONTENTS