API 后端本地运行&部署教程
环境准备
- API 平台源码
- IDEA 你懂的教程
- Redis 网盘安装包 提取码: vmty
- MySQL5.7 网盘安装包 提取码:bbr5
- MySQL8.0 网盘安装包提取码:g17s
- MySQL 安装指南
- MySQL 官方下载链接
- Nacos 官方下载链接
- Nacos 网盘链接 提取码:
9m72
本地启动
设置 Maven 完成 https://www.codefather.cn/post/1836689783992958977
使用 IDEA 打开项目

初始化数据
连接本地 MySQL
点击 Download 下载 driver files
输入,账号密码之后点击Test Connection 成功之后直接点击 OK
找到根目录 sql 目录下面的 create_table.sql

安装依赖
- 首先需要配置好本地
Mavne, 和阿里云镜像,要是没有配置的话可以看一下这篇文章
然后可以在 Build 看到正在下载依赖

选择 Java 版本
没有的话可以使用下面的 Download JDK
- 本地没有 JDK 可以直接
Download JDK - 本地有 JDK 但是没识别到
Add JDK from disk选着对应目录即可 - 选择 Java >= 8 建议 8
安装 Nacos 2.2.0
- 官方下载链接
- 网盘链接 https://pan.baidu.com/s/16J46flMD86ZdEn9r-npbEA 提取码:
9m72
下载之后解压到常用安装软件的目录
进入到 nacos/bin 目录下
▼text复制代码cd nacos/bin
Windows
▼text复制代码startup.cmd -m standalone
启动如果报错端口占用的话,重启电脑即可解决
Linux/mac
▼text复制代码sh startup.sh -m standalone
访问网址

默认账号和用户名都是 nacos
到此就算 nacos 启动成功🤩
修改配置文件
配置文件在下面项目的 resources 目录
- application.yml 默认是本地运行时生效的配置
- application-prod.yml 当在服务器指定
--spring.profiles.active=prod才会生效,一般写线上配置,比如:线上 MySQL、Redis ... - application-test.yml 当在服务器指定
--spring.profiles.active=test才会生效
MySQL
▼yml复制代码spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/yuapi # yuapi 是数据库的名称 如果是远程 MySQL 例如: jdbc:mysql://192.129.11.11:3306/yuapi username: root # 用户名 password: 123456 # MySQL 设置的密码
Redis
▼yml复制代码spring: redis: database: 1 host: localhost # 如果线上改成线上 IP port: 6379 # Redis 具体运行端口,默认安装 6379 timeout: 5000 # password: 123456 # 密码,默认安装没有密码,如果服务器 Redis 有密码就修改
项目里面的 dubbo 相关的配置可以不用进行修改
▼yml复制代码dubbo: application: name: dubbo-springboot-demo-provider protocol: name: dubbo port: -1 registry: id: nacos-registry address: nacos://localhost:8848
本地运行
1、首先这个项目有
- yuapi-interface 服务真实提供方
- yuapi-gateway 网关
- yuapi-common 公共依赖一些
model和 nacos 调用的service - yuapi-client-sdk 方便
yuapi-backend方便发送向 gateway 发送请求 - yuapi-backend 主项目
依次打开下面 4 个项目

install
1、我们需要先 install 这两个 yuapi-client-sdk、yuapi-common
yuapi-common
出现报错

这个报错原因是因为
Java版本的问题,通过 选择 Java 版本 章节进行设置成 Java8 即可
再次执行 install 命令 ,可以看到成功 BUILD SUCCESS
2、install yuapi-client-sdk 项目

启动
1、install 之后 yuapi-client-sdk 和 yuapi-common 关闭即可
2、剩下的三个项目的启动顺序
首先 yuapi-backend 然后 yuapi-gateway 最后启动 yuapi-interface
3、需要确保 MySQL、Redis、Nacos 是运行状态
右下角可能会有 Lombok require enable annotation processing 直接点 Enable annotation processing 即可
yuapi-backend
首先启动 yuapi-backend 否者先启动 yuapi-gateway 会报错导致启动不起来

启动成功
yuapi-gateway
1、修改 YuapiGatewayApplication 变成
▼java复制代码@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) @EnableDubbo @Service public class YuapiGatewayApplication { // [程序员交流园地](https://www.codefather.cn/) 从 0 到 1 求职指导,斩获 offer!1 对 1 简历优化服务、200+ 真实简历和建议参考、25w 字前后端精选面试题、2000+ 求职面试经验分享 public static void main(String[] args) { SpringApplication.run(YuapiGatewayApplication.class, args); } // @Bean // public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { // return builder.routes() // .route("tobaidu", r -> r.path("/baidu") // .uri("https://www.baidu.com")) // .route("toyupiicu", r -> r.path("/yupiicu") // .uri("http://yupi.icu")) // .build(); // } }
启动 yuapi-gateway
报错?!
▼text复制代码*************************** APPLICATION FAILED TO START *************************** Description: Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway. Action: Please set spring.main.web-application-type=reactive or remove spring-boot-starter-web dependency.
解决:修改 application.yml

添加下面的配置即可
▼yml复制代码spring: main: web-application-type: reactive
如果使用 Java17 会出现在 yuapi-backend 和 yuapi-gateway 报错
解决:切换到 Java8 或者根据这个 issue
▼text复制代码java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String java.lang.StackTraceElement.fileName accessible: module java.base does not "opens java.lang" to unnamed module @65d09a04 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) at java.base/java.lang.reflect.Field.setAccessible(Field.java:172) at com.alibaba.com.caucho.hessian.io.JavaDeserializer.getFieldMap(JavaDeserializer.java:340) at com.alibaba.com.caucho.hessian.io.JavaDeserializer.<init>(JavaDeserializer.java:80) at com.alibaba.com.caucho.hessian.io.StackTraceElementDeserializer.<init>(StackTraceElementDeserializer.java:56) at com.alibaba.com.caucho.hessian.io.SerializerFactory.<clinit>(SerializerFactory.java:189) at org.apache.dubbo.common.serialize.hessian2.dubbo.DefaultHessian2FactoryInitializer.createSerializerFactory(DefaultHessian2FactoryInitializer.java:26) at org.apache.dubbo.common.serialize.hessian2.dubbo.AbstractHessian2FactoryInitializer.getSerializerFactory(AbstractHessian2FactoryInitializer.java:46)

解决办法:
1)使用 Java8 参考 选择 Java 版本
2)仍然使用 Java17
解决办法

然后将下面的复制到 VM options 里面 ,重新启动项目即可
▼text复制代码--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED
yuapi-interface
这个启动就相对简单,直接启动即可
启动成功
测试
打开前端进行测试
用接口文档测试比较麻烦,建议直接用前端进行测试
测试需要 SQL 数据,首先需要执行一下下面的 INSERT 语句
User 表
登录密码是 11111111
▼sql复制代码INSERT INTO yuapi.user (id, userName, userAccount, userAvatar, gender, userRole, userPassword, accessKey, secretKey, createTime, updateTime, isDelete) VALUES (1, null, 'leikooo', null, null, 'admin', 'f8de235116ca2ec0b8ee885b5c743072', 'e7e813d620ca45d94edbee2e50001dc7', '401e2ead47bf3fd74de46581f421cd69', '2025-02-16 21:25:31', '2025-02-16 21:45:38', 0);
User-info 表
▼sql复制代码INSERT INTO yuapi.interface_info (id, name, description, url, requestParams, requestHeader, responseHeader, status, method, userId, createTime, updateTime, isDelete) VALUES (1, 'api', 'api', 'http://localhost:8123/api/name/user', '{"username": "aaa"}', '{"Content-Type":"application/json"}', '{"Content-Type":"application/json"}', 1, 'POST', 1, '2025-02-16 21:32:05', '2025-02-16 21:47:11', 0);
user-interface-info 表,这个表的内容是,某一个接口的剩余调用次数
▼sql复制代码INSERT INTO yuapi.user_interface_info (id, userId, interfaceInfoId, totalNum, leftNum, status, createTime, updateTime, isDelete) VALUES (1, 1, 1, 102, 98, 0, '2025-02-16 21:46:15', '2025-02-16 21:47:39', 0);
制作 + 上传 JAR 包
Lifecycle -> package 双击
之后我们就可以在 target 目录下面找到打包好的 jar 包
我们需要执行 pakage 的有三个项目
1、yuapi-interface
2、yuapi-gateway
3、yuapi-backend
这三个项目我们都需要分别 pakage 然后上传到服务器上,才能正常运行全部功能
如果报错的话:
- 删除
target目录(IDEA 右键删除即可),重新打包尝试 - Maven -> Lifecyle -> clean
- 退出 IDEA 在
文件管理器找到该项目的.idea文件右键删除 ,然后重新打开 IDEA 重新走一遍流程
部署
后面可以参考这篇文章 『 后端部署(通用) 』

