docs(README): 更新前后端部署说明

- 优化数据库配置步骤,增加创建数据库和导入SQL文件的详细说明
- 更新配置文件修改说明,提供更具体的配置示例
- 补充API文档访问说明
- 完善前端部署步骤,包括运行开发服务器和生产构建
- 增加SnowflakeIdUtil和TimeUtil工具类
This commit is contained in:
ikmkj
2025-07-29 23:00:58 +08:00
parent 8dab150332
commit 6ed9f73732
4 changed files with 161 additions and 22 deletions

6
.clinerules Normal file
View File

@@ -0,0 +1,6 @@
1、执行任务的时候首先分析任务然后将该任务分成多个可执行的小任务一步一步执行。
2、不要启动我项目的服务
3、若是新建项目或者开发新的功能首先使用context7 MCP服务来寻找对应的文档
4、若是修改业务逻辑等就不要使用context7 MCP服务来寻找对应的文档先查看查看前端该功能对应的后端接口查看后端接口的逻辑若是已经实现就返回前端处理逻辑若是后端还们没有实现则先处理后端在处理前端。
5、使用filesystem MCP服务来对文件进行操作只能操作修改、更新、创建或者删除有关到对文件的操作如修改更新创建和删除等都要使用filesystem MCP服务只有查看或者读取文件的时候使用apply_diff工具。
6、若是规则5对文件操作失败则使用apply_diff工具若是apply_diff失败或者文件修改编辑失败就要先保存该文件然后重新读取在做修改再来apply_diff。

View File

@@ -124,46 +124,88 @@
### 后端部署
1. 配置数据库
1. **配置数据库**
在您的MySQL服务器中创建一个名为 `music_db` 的数据库,并使用 `utf8mb4` 字符集。
```sql
CREATE DATABASE music_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
然后,将 `sql/music_db.sql` 文件导入到 `music_db` 数据库中,以创建所有必需的表和初始数据。
2. 修改配置文件
- 编辑 `music-houduan/src/main/resources/application.yml`
- 配置数据库连接信息
- 配置Redis连接信息
- 配置文件上传路径
2. **修改配置文件**
- 打开 `music-houduan/src/main/resources/application.yml` 文件。
- **数据库连接**:找到 `spring.datasource` 部分,并更新 `url`、`username` 和 `password` 以匹配您的MySQL配置。
```yaml
url: jdbc:mysql://localhost:3306/music_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: your-mysql-username
password: your-mysql-password
```
- **Redis连接**:找到 `spring.redis` 部分,并更新 `host` 和 `port`。
```yaml
host: localhost
port: 6379
```
- **文件上传路径**:找到 `file.upload` 部分,并配置您希望存储上传文件的路径,或者保留不修改。
```yaml
path: /path/to/your/upload/folder/
```
请确保此目录存在并且您的应用程序具有写入权限。
3. 构建项目
3. **构建项目**
在 `music-houduan` 目录下使用Maven构建项目。
```bash
cd music-houduan
mvn clean package -DskipTests
```
4. 运行项目
4. **运行项目**
构建成功后运行生成的jar文件。
```bash
java -jar target/music-houduan-1.0.0.jar
```
默认情况下,后端服务将在 `http://localhost:8085` 上运行。
5. **API文档**
您可以通过以下URL访问API文档
- **Swagger UI**: [http://localhost:8085/swagger-ui/index.html](http://localhost:8085/swagger-ui/index.html)
- **Knife4j**: [http://localhost:8085/doc.html](http://localhost:8085/doc.html)
### 前端部署
1. 安装依赖
1. **安装依赖**
在 `music-qianduan` 目录下使用npm安装项目依赖项。
```bash
cd music-qianduan
npm install
```
2. 修改配置
- 编辑 `.env` 文件配置API地址
2. **修改配置**
- 在 `music-qianduan` 根目录中,创建一个名为 `.env.development` 的文件(用于开发环境)或 `.env.production` 文件(用于生产环境)。
- 在此文件中,设置 `VITE_API_URL` 变量以指向您的后端API。
```
VITE_API_URL=http://localhost:8085
```
3. 构建项目
3. **运行开发服务器**
对于开发请使用以下命令启动Vite开发服务器
```bash
npm run dev
```
前端应用程序将在 `http://localhost:5173` 上可用。
4. **构建项目**
对于生产,请使用以下命令构建项目:
```bash
npm run build
```
4. 部署静态资源
- 将 `dist` 目录下的文件部署到Web服务器
5. **部署静态资源**
- 构建完成后,将 `music-qianduan/dist` 目录的内容部署到您的Web服务器例如Nginx、Apache
- 确保您的Web服务器配置正确以处理单页应用程序SPA的路由。对于Nginx您可能需要添加如下配置
```nginx
location / {
try_files $uri $uri/ /index.html;
}
```
## 使用说明
@@ -209,11 +251,3 @@
- 后端开发XXX
- 产品设计XXX
- 测试XXX
## 版权声明
本项目仅用于学习和演示目的,不得用于商业用途。音乐文件版权归原作者所有。
## 联系方式
如有问题或建议请联系example@example.com

View File

@@ -0,0 +1,78 @@
package com.test.musichouduan.util;
public class SnowflakeIdUtil {
private static final long START_TIMESTAMP = 1609459200000L; // 2021-01-01 00:00:00
private static final long SEQUENCE_BIT = 12;
private static final long MACHINE_BIT = 5;
private static final long DATA_CENTER_BIT = 5;
private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT);
private static final long MAX_MACHINE_NUM = ~(-1L << MACHINE_BIT);
private static final long MAX_DATA_CENTER_NUM = ~(-1L << DATA_CENTER_BIT);
private static final long MACHINE_LEFT = SEQUENCE_BIT;
private static final long DATA_CENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
private static final long TIMESTAMP_LEFT = DATA_CENTER_LEFT + DATA_CENTER_BIT;
private long dataCenterId;
private long machineId;
private long sequence = 0L;
private long lastStamp = -1L;
private static SnowflakeIdUtil instance;
public static synchronized SnowflakeIdUtil getInstance() {
if (instance == null) {
instance = new SnowflakeIdUtil(1, 1);
}
return instance;
}
public SnowflakeIdUtil(long dataCenterId, long machineId) {
if (dataCenterId > MAX_DATA_CENTER_NUM || dataCenterId < 0) {
throw new IllegalArgumentException("Data center ID can't be greater than " + MAX_DATA_CENTER_NUM + " or less than 0");
}
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new IllegalArgumentException("Machine ID can't be greater than " + MAX_MACHINE_NUM + " or less than 0");
}
this.dataCenterId = dataCenterId;
this.machineId = machineId;
}
public synchronized long nextId() {
long currStamp = getNewStamp();
if (currStamp < lastStamp) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id");
}
if (currStamp == lastStamp) {
sequence = (sequence + 1) & MAX_SEQUENCE;
if (sequence == 0L) {
currStamp = getNextMill();
}
} else {
sequence = 0L;
}
lastStamp = currStamp;
return (currStamp - START_TIMESTAMP) << TIMESTAMP_LEFT
| dataCenterId << DATA_CENTER_LEFT
| machineId << MACHINE_LEFT
| sequence;
}
private long getNextMill() {
long mill = getNewStamp();
while (mill <= lastStamp) {
mill = getNewStamp();
}
return mill;
}
private long getNewStamp() {
return System.currentTimeMillis();
}
}

View File

@@ -0,0 +1,21 @@
package com.test.musichouduan.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeUtil {
public static String getCurrentTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
public static long getTimestamp() {
return System.currentTimeMillis();
}
public static String formatDate(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
}