一、配置和术语讲解【跟前端对比】
1.🛡️ 第一集团军:基地与后勤补给(环境与构建)
没有地基,再牛的武器也开不出去。这是你大军开拔的前提。
Java JDK (兵营地基) = Node.js
这是最底层的生存环境。就像你写 Vue/React 电脑里必须装 Node 一样,没装 JDK,你的服务器上连个 Java 兵都产不出来,全线瘫痪。
Maven (后勤采购总管) = npm/yarn + Webpack
它负责两件事:一是照着你的采购单(pom.xml,等同于 package.json)去全世界下载别人写好的代码包;二是负责把你的零散代码进行打包编译。
Jar 包 (终极破甲弹) = dist 静态产物文件夹
开发的时候代码是散装的,但真到了上战场(部署到服务器)时,Maven 会把你所有的代码、依赖全部压缩成一个沉甸甸的独立炸弹(后缀为 .jar 的文件)。只要服务器上有 JDK,把这个炸弹扔过去执行命令,系统就直接跑起来了。
2.⚔️ 第二集团军:战术框架与重型武器(代码骨架)
- 没人会用冷兵器去打现代战争,所以你需要现代化的战车。
Spring Boot (中央指挥战车) = Next.js 或 Nuxt (你没问,但它是整个后端的灵魂)
几乎所有的现代 Java 后端都是跑在 Spring Boot 上的。它屏蔽了老一代 Java 极其恶心的繁琐配置,内置了服务器,让你“开箱即用”。你这两天敲的指令里带了 spring-boot:run,就是启动了这辆战车。
BladeX (特种作战套装) = Ant Design Pro
它是在 Spring Boot 这辆战车的基础上,别人帮你改装好的“VIP尊享版装甲车”。企业级开发里那些最恶心的脏活(用户登录、权限分配、菜单管理)它全自带了,你只需要在这个壳子里写具体的业务就行。
3.📡 第三集团军:情报局与通讯网络(数据层)
- 仗怎么打,全看情报准不准。后端的核心资产只有一样:数据。
MySQL (地下绝密情报库) = 永远不丢的超级 localStorage (你没问,但它是最终归宿)
冷酷、严谨的关系型数据库。所有的用户资产、账单记录最终都要锁死在这里面,只要硬盘不炸,数据就永远在。它只认二维表格形式的暗号(SQL 语句)。
Redis (前线极速战壕/黄金备餐台) = Redux/Pinia 的服务器版本
因为 MySQL 每次去硬盘读数据太慢了,一旦百万大军(高并发)同时冲过来,MySQL 当场就会死机。所以放一个在内存里运行的 Redis 挡在最前面。热门数据秒存秒取,极速响应。
people------ redis-----mysql
MyBatis (皇家翻译官) = 极致增强版的 axios 响应拦截器
Java 将领(对象)不懂 MySQL 情报库的暗号(SQL 表格)。MyBatis 夹在中间,负责把 Java 发出的命令翻译成 SQL 去查库,查完再把干瘪的数据表格瞬间组装成 Java 对象,端给指挥官看。
java -------mybatis---------mysql
4.⚙️ 第四集团军:三步作战指令网(业务执行流)
- 这就是你写接口时,代码里的核心调用链路。
| controller | service | Mapper/DAO |
|---|---|---|
| 前端api | 逻辑 | mysql处理(Mapper带着mybatis去处理mysql) |
Controller 层 (总参接待处) = 你的 API 路由
专门负责接你前端 axios 发来的请求(比如那个 InputReviewStatusVO 情报箱)。他只负责检查前端传的参数对不对,自己绝对不干打仗的脏活。
Service 层 (特种突击队) = 核心业务逻辑组件
Controller 检查参数没问题后,会把任务扔给 Service。所有的算账、判断、驳回逻辑(比如你昨晚遇到的那个忘记写 result = … 的内鬼)全在这里发生。这是你的主战场!
Mapper/DAO 层 (地下联络员) = 触发数据库的开关
Service 算好账了,决定要修改数据库,就会呼叫 Mapper。Mapper 会立刻带着 MyBatis 这个翻译官,一头扎进 MySQL 数据库,执行最终的“斩首行动”。
5.🔍 第五集团军:隐藏的雷达与黑匣子(你必须懂的生存工具)
Swagger / Knife4j (战地雷达说明书) (前端最爱)
后端把上面那一套写完后,你怎么知道接口地址是什么?参数怎么传?这个工具会自动扫描后端的 Controller,生成一个极其漂亮的在线文档,甚至能直接在页面上发请求测试。以后找后端要接口,直接让他发 Swagger 地址!
Logback / SLF4J (战地黑匣子日志) (保命神器)
后端没有你熟悉的 Chrome console.log 面板!代码部署到几千公里外的 Linux 服务器上,如果跑崩了,你看不见摸不着。全靠后端代码里打的 log.info() 或 log.error() 记录下运行轨迹。系统一瘫痪,老兵们全都在黑乎乎的终端里查日志,这就是后端的“眼”。
6.后勤
🚢镜像(Image):绝对静止的“预制兵营模具”
大白话: 咱们不扯什么操作系统层面的虚拟化。你就把它想象成一个“超时空冷冻胶囊”或者“连带地基一起打包的预制饭店”。
战略意义: 以前你把代码交给运维,运维得在服务器上手动装 JDK、装 Redis、配环境变量,稍微有点版本不对,系统就当场崩溃(经典推诿:“在我电脑上明明是好的啊!”)。
现在有了镜像,你在本地把代码、JDK、配置环境,甚至连操作系统的壳子,全部“咔嚓”一下拍个快照,冻结成一个绝对静止的、死板的“模具”。这个模具拿到全世界任何一台电脑上,里面的东西都一模一样,绝对不会缺胳膊少腿!
Docker:降维打击的“超级集装箱运输舰”
大白话: 如果“镜像”是那个预制饭店的模具,那 Docker 就是负责装载、运输并且一键把饭店“盖”起来的超级运输舰和起重机。
战略意义: 服务器上装了 Docker 之后,你只需要下达一条指令:docker run 你的镜像。Docker 就会立刻把那个冷冻的“镜像”解冻,瞬间变成一个活生生、能接客的饭店(这就叫容器 Container)。
它把所有的环境配置都隔离在集装箱里,你可以在一台服务器上同时跑 5 个不同版本的系统,互不干扰。这就叫工业化大生产,扫平一切后勤障碍!
7.情报安全
HTTPS 密钥:最高级别的“绝密通讯密码本”
大白话: 你的前端页面和后端接口在互联网上聊天,中间要经过无数个基站和路由器。如果用传统的 HTTP,你们就像在广场上拿着大喇叭喊:“喂!我的账号是admin,密码是123456!”路过的黑客哪怕是个实习生都能听得一清二楚。
战略意义: HTTPS 密钥就是一对“恩尼格玛密码机”。
公钥(发给所有人的锁): 你在前端页面里放一把打开状态的锁,用户填完密码,立刻用这把锁锁上,变成一堆乱码扔到网上。
私钥(藏在后端的钥匙): 这把钥匙死死攥在你的 Docker 后端手里。网上哪怕有人截获了那个锁上的盒子,没有私钥,他们就算用超级计算机算上一百年也打不开。这保证了你的数据在运输线上的绝对安全。
换证书(SSL 换防):定期的“密码本销毁与重置”
大白话: 既然是密码本,就不能用一辈子,万一哪天私钥被内鬼泄露了呢?所以国际情报局(CA 认证机构)规定,所有的安全证书(密码本)都必须有保质期(以前是一年,现在通常是 90 天)。
战略意义: “换证书”就等于全军定期换防,启用全新的密码本。
每隔几个月,你得去权威机构申请一套全新的公钥和私钥,然后替换掉服务器上旧的。如果你忘了换,旧密码本一过期,浏览器就会立刻拉响最高级别的红色警报:“该网站连接不安全!”,直接把你的用户全部挡在门外。
二、项目启动(cursor)
- 进入项目目录
cd d:\web\xxx - 常用启动方式(推荐 dev 环境)
方式 A:Maven 直接跑(开发最常用)mvn spring-boot:run "-Dspring-boot.run.profiles=dev"
方式 B:先打包再运行mvn clean package -DskipTests java -jar target\blade-api.jar --spring.profiles.active=dev
打包后的 jar 名是blade-api(见 pom.xml 里 bladex.project.id)。
三、运行报错问题解决
1.终端写命令报错
原因
在 PowerShell 里直接写:
mvn spring-boot:run -Dspring-boot.run.profiles=dev
-Dspring-boot… 会被 PowerShell 拆开,Maven 实际收到的是类似 .run.profiles=dev 这种东西,所以报错:Unknown lifecycle phase ".run.profiles=dev"
正确写法(任选一种)
方式 1:给 -D 参数加引号(推荐)
cd D:\web\xxxmvn spring-boot:run "-Dspring-boot.run.profiles=dev"
方式 2:用项目脚本(已写好引号)
cd D:\web\xxx .\start-dev.ps1方式 3:停止 PowerShell 解析
mvn --% spring-boot:run -Dspring-boot.run.profiles=dev