# 配置文件说明

## 外部配置文件方案

为了解决 Druid 配置无法通过环境变量覆盖的问题，我们使用外部配置文件方案。

## 文件结构

```
deploy/backend/
├── Dockerfile
├── entrypoint.sh
├── application-druid.yml    # 外部配置文件
└── ruoyi-admin.jar          # 你的 jar 包
```

## 配置文件说明

### application-druid.yml

这个文件会覆盖 jar 包内的 `application-druid.yml` 配置。

**重要配置项**：

```yaml
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://host.docker.internal:3316/ry-vue?...
        username: root
        password: jiong1114  # 修改为你的密码

  redis:
    host: host.docker.internal
    port: 6379
    password:  # 如果有密码，填写这里
```

### 修改配置

如果需要修改数据库连接信息，编辑 [application-druid.yml](backend/application-druid.yml)：

1. **数据库地址**: 修改 `master.url`
2. **数据库用户名**: 修改 `master.username`
3. **数据库密码**: 修改 `master.password`
4. **Redis 地址**: 修改 `redis.host`
5. **Redis 密码**: 修改 `redis.password`

## 工作原理

Spring Boot 会按以下顺序加载配置（后面的会覆盖前面的）：

1. jar 包内的 `application.yml`
2. jar 包内的 `application-druid.yml`
3. jar 包外的 `application.yml`（如果存在）
4. jar 包外的 `application-druid.yml` ✅ **我们使用这个**

## 重新部署

修改配置后，需要重新构建镜像：

```bash
# 停止并删除旧容器
docker stop wecom-backend
docker rm wecom-backend

# 重新构建并启动
cd deploy
docker compose up -d --build backend

# 查看日志
docker compose logs -f backend
```

## 不需要重新构建的方案

如果你想修改配置而不重新构建镜像，可以使用卷挂载：

### 修改 docker-compose.yml

```yaml
services:
  backend:
    volumes:
      - upload_data:/home/ruoyi/uploadPath
      - ./backend/application-druid.yml:/app/application-druid.yml  # 挂载配置文件
```

这样修改 `backend/application-druid.yml` 后，只需重启容器：

```bash
docker compose restart backend
```

## 验证配置

### 1. 检查配置文件是否被复制

```bash
docker exec -it wecom-backend cat /app/application-druid.yml
```

### 2. 查看启动日志

```bash
docker compose logs backend | grep -i "datasource\|redis"
```

### 3. 测试数据库连接

```bash
# 进入容器
docker exec -it wecom-backend sh

# 测试 MySQL 连接（需要安装 telnet 或 nc）
nc -zv host.docker.internal 3316

# 测试 Redis 连接
nc -zv host.docker.internal 6379
```

## 常见问题

### 1. 配置文件没有生效

确认配置文件在正确的位置：
```bash
docker exec -it wecom-backend ls -la /app/
```

应该看到 `application-druid.yml` 文件。

### 2. 数据库名称不匹配

确保 MySQL 中存在对应的数据库：
```bash
docker exec -it mysql-jijin-test mysql -uroot -pjiong1114 -e "SHOW DATABASES;"
```

如果没有 `ry-vue` 数据库，创建它：
```bash
docker exec -it mysql-jijin-test mysql -uroot -pjiong1114 -e "CREATE DATABASE IF NOT EXISTS \`ry-vue\` DEFAULT CHARACTER SET utf8mb4;"
```

### 3. 仍然报配置错误

检查 jar 包的 Spring Boot 版本和配置加载方式。某些版本可能需要使用 `--spring.config.location` 参数：

修改 `entrypoint.sh`：
```bash
#!/bin/sh
exec java -Dspring.profiles.active=prod \
    --spring.config.location=classpath:/,file:/app/ \
    -jar app.jar
```

## 完整的部署流程

```bash
# 1. 准备文件
deploy/backend/
├── ruoyi-admin.jar           # 你的 jar 包
├── application-druid.yml     # 已创建
├── entrypoint.sh             # 已创建
└── Dockerfile                # 已创建

# 2. 修改配置（如果需要）
vim deploy/backend/application-druid.yml

# 3. 构建并启动
cd deploy
docker compose up -d --build backend

# 4. 查看日志
docker compose logs -f backend

# 5. 验证启动成功
# 看到 "Started RuoYiApplication" 表示成功
```
