API 后端本地运行&部署教程

环境准备

本地启动

设置 Maven 完成 https://www.codefather.cn/post/1836689783992958977

使用 IDEA 打开项目

image-20250216170533991

初始化数据

连接本地 MySQL

image-20241030155405801 image-20241030155543228

点击 Download 下载 driver files

image-20241030155613559

输入,账号密码之后点击Test Connection 成功之后直接点击 OK

image-20241030155950071

找到根目录 sql 目录下面的 create_table.sql

image-20250216170825919

image-20250216171127888

安装依赖

  • 首先需要配置好本地 Mavne, 和阿里云镜像,要是没有配置的话可以看一下这篇文章
image-20241112134330112

然后可以在 Build 看到正在下载依赖

image-20241101132248226

选择 Java 版本

image-20241101132905013 image-20250216185612629

没有的话可以使用下面的 Download JDK

image-20241114112524129 image-20250216185720974
  • 本地没有 JDK 可以直接 Download JDK
  • 本地有 JDK 但是没识别到 Add JDK from disk 选着对应目录即可
  • 选择 Java >= 8 建议 8

安装 Nacos 2.2.0

下载之后解压到常用安装软件的目录

进入到 nacos/bin 目录下

▼
text
复制代码
cd nacos/bin
image-20241102171050965

Windows

▼
text
复制代码
startup.cmd -m standalone
image-20241102171233978

启动如果报错端口占用的话,重启电脑即可解决

Linux/mac

▼
text
复制代码
sh startup.sh -m standalone

访问网址

image-20250216171621166

image-20250216171715296

默认账号和用户名都是 nacos

到此就算 nacos 启动成功🤩

image-20250216171731862

修改配置文件

配置文件在下面项目的 resources 目录

image-20241101133355503
  • 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 个项目

image-20250216172743436

install

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

image-20250216172656580

yuapi-common

image-20250216181931205

出现报错

image-20250216173350355

这个报错原因是因为 Java 版本的问题,通过 选择 Java 版本 章节进行设置成 Java8 即可

再次执行 install 命令 ,可以看到成功 BUILD SUCCESS

image-20250216182020055

2、install yuapi-client-sdk 项目

image-20250216182307151

启动

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 即可

image-20241101142832527

yuapi-backend

首先启动 yuapi-backend 否者先启动 yuapi-gateway 会报错导致启动不起来

image-20250216182632968

启动成功

image-20250216191157621

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

image-20250216183830148

报错?!

▼
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

image-20250216184101657

添加下面的配置即可

▼
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)

image-20250216185103656

解决办法:

1)使用 Java8 参考 选择 Java 版本

image-20250216185801854

2)仍然使用 Java17

解决办法

image-20250216190020824 image-20250216190206943

image-20250216190308111

然后将下面的复制到 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
image-20250216190402821

yuapi-interface

这个启动就相对简单,直接启动即可

image-20250216190929147

启动成功

image-20250216191055017

测试

打开前端进行测试

image-20250216214814051

用接口文档测试比较麻烦,建议直接用前端进行测试

测试需要 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 包

image-20250216215421414

Lifecycle -> package 双击

之后我们就可以在 target 目录下面找到打包好的 jar 包

我们需要执行 pakage 的有三个项目

1、yuapi-interface

2、yuapi-gateway

3、yuapi-backend

这三个项目我们都需要分别 pakage 然后上传到服务器上,才能正常运行全部功能


如果报错的话:

  1. 删除 target 目录(IDEA 右键删除即可),重新打包尝试
  2. Maven -> Lifecyle -> clean
  3. 退出 IDEA 在文件管理器找到该项目的 .idea 文件右键删除 ,然后重新打开 IDEA 重新走一遍流程
image-20240928104016670 image-20240928104101415

部署

后面可以参考这篇文章 『 后端部署(通用) 』

相关专栏

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
leikooo
作者分享
IP 数据库体积缩小 31%,关键竟然是合并重复子树
2
提到用 Rust 重写项目,很多人的第一反应往往是性能提升。以 Bun 为例,它最初主要采用 Zig 开发,后来在 2026 年发布的 v1.4 版本中将核心代码迁移到了 Rust。用 Rust 重写,性能、安全性往往是大家想要的,但是有没有想过用 Rust 重写还能发现 bug 呢? pgrust 这个项就是,他用 Rust 重新实现 PostgreSQL,保持通信协议和 SQL 方言兼容。为了确认新系统的行为和原版一致,开发者需要对着 PostgreSQL 的实际返回逐个比对。结果查着查着,有些异常不是新代码的锅,PostgreSQL 自己就是这样的。pgrust 开发者 Michael Malis 把其中几个报告给了 PostgreSQL 社区。 大概的问题: 1)SP-GiST 空间索引里有个函数判断点的方位,代码认为上、下、同一水平线三种情况已经穷尽了,末尾放了句「impossible case」兜底。结果在特定浮点边界附近,三种判断同时不成立,程序真走进了这个「不可能」的分支 2)日期格式缓存复用时,一个解析模式的标记没重置,导致同一条 JSONPath 查询在同一个会话里,换个执行顺序结果就不一样。 3)pgcrypto 的 crypt() 在某些输入下截断了多字节字符,返回的文本编码不合法。能存进去,但 pg_dump 导出时就炸了。 一个用 Rust 重写的新项目,测着测着,把运行了几十年的 PostgreSQL 里埋着的东西翻了出来。Rust 重写的价值,不一定只在跑得更快、更安全这一件事上。为了做到真正的兼容,开发者得把前人没怎么碰过的边界全走一遍,这个过程本身就在帮原版排雷。
4
ARTS 1025: 唯一字符与同构字符串、省词可能增加阅读负担与重新估算软件的实现成本
5
🎉 1024 程序员节快乐! 祝编程导航里的每一位程序员:offer 多多,薪资翻倍,面试顺利,早日拿下心仪 offer!💻
17
AST:从 Java 代码理解抽象语法树
5
下载 APP