应用配置
日常只维护根目录的实际配置:开发用 config/application-dev.yml,生产用 config/application-prod.yml。Docker 与直接运行 JAR 使用同一套 Spring 属性,普通客户无需逐项填写自定义环境变量。
文件分别负责什么
| 文件 | 职责 |
|---|---|
art-admin/src/main/resources/application*.yml | 随产品发布的公共与环境默认值 |
config/application-*.example.yml | 带注释的填写模板,不会自动加载 |
根目录 config/application-dev.yml / application-prod.yml | 客户实际连接、存储与密钥,不进入 Git、JAR 或镜像 |
deploy/compose.dev.yml / compose.prod.yml | 客户 Docker 端口、资源和 MySQL 管理员凭据 |
| 后台站点配置页面 | 品牌、注册开关等业务运行设置,不替代服务器连接配置 |
同一环境中的覆盖顺序通常为:包内公共 YAML → 包内环境 YAML → 外置环境 YAML。平台还可用 Spring 标准环境变量或命令行覆盖,排错时注意多处配置的优先级。
生成或准备配置
- 随包本地数据服务:
sh scripts/deploy.sh dev自动准备开发配置;只准备文件用sh scripts/deploy.sh init-dev。 - 自备数据库:从 example 复制实际 YAML,填写自己的连接。
- 生产随包部署:
sh scripts/deploy.sh init https://admin.example.com,检查生成的两份实际 YAML。
已有实际文件不使用新版模板覆盖。已有数据卷但缺少连接凭据时恢复原配置,不重新生成一套密码猜测数据库凭据。
按要修改的内容找位置
| 要改什么 | 修改哪里 | 如何生效 |
|---|---|---|
| 本机 Java 端口 | 开发 YAML 的 server.port | 重启 Java,并同步前端代理 |
| Docker 开发 MySQL / Redis 本机端口 | 开发 YAML 的 JDBC URL / Redis port | 重新执行 sh scripts/deploy.sh dev |
| 生产 Docker 对外 API 端口 | deploy/compose.prod.yml 的 app ports | 执行 config,同步网关;容器内仍为 13001 |
| 数据库、Redis 密码 | 当前环境 YAML,并协调服务端实际账号 | 重启或执行 config;已有库不会因改 YAML 自动改密 |
| Logo、站点名称等业务设置 | 管理端站点配置页面 | 保存后按页面流程刷新确认 |
| AI 或云存储 | 当前环境 YAML 的 art 部分 | 重启 Java;生产 Docker 执行 config |
例:将本地 Java 端口改为 13002
在 config/application-dev.yml 中找到或添加以下节点,再修改前端 .env.development 的代理:
server:
port: 13002 # 本机 Java 的监听端口VITE_API_PROXY_URL = http://localhost:13002重启两个开发服务,访问 http://localhost:13002/actuator/health,再验证前端登录。此例用于本机 Java;随包生产 Docker 应调整宿主机映射,不修改内部端口。
例:生产 Docker 对外使用 14001
在 deploy/compose.prod.yml 的现有 services.app 下修改 ports:
services:
app:
ports:
- "127.0.0.1:14001:13001" # 宿主机 14001 → 容器 13001保留同一文件的其他配置,执行 sh scripts/deploy.sh config,将 Nginx upstream 同步改为 127.0.0.1:14001。
常用参数
| 属性 | 作用 |
|---|---|
server.port | Java 服务端口,默认 13001 |
spring.datasource.druid.url/username/password | MySQL 地址、数据库与应用账号 |
spring.data.redis.host/port/password/database | Redis 连接与逻辑库 |
art.cache.key-prefix | 缓存、登录态、验证码、临时凭证及任务锁的环境隔离 |
app.upload-path | 本地上传目录,生产使用持久化目录 |
app.web.cors.allowed-origins | 允许的完整前端 Origin,多个值逗号分隔 |
app.auth.refresh-cookie-secure | HTTPS 生产保持 true,本地 HTTP 开发配置为 false |
art.storage.type | local、minio、aliyun |
art.ai-assistant | 上游地址、模型、密钥、超时与并发 |
app.notification.stream-token-secret | 通知流临时凭证签名密钥 |
app.mall.payment.credential-key | Base64 编码的 32 字节支付凭据加密密钥 |
app.crypto.private-key-path | 持久化 RSA 私钥文件路径 |
app.deployment.multi-instance | 是否启用多实例配置检查 |
app.deployment.shared-local-storage | 声明所有实例确实挂载同一文件目录 |
自备数据服务示例
以下仅演示结构,替换占位值:
spring:
datasource:
druid:
url: "jdbc:mysql://127.0.0.1:3306/art_design?useSSL=false&serverTimezone=GMT%2B8"
username: art_design
password: "填写数据库密码"
data:
redis:
host: 127.0.0.1
port: 6379
password: "" # 仅未启用 Redis 认证时留空;否则填写实际密码YAML 直接填写字符串。使用引号保留中文和特殊字符,字符串中的单引号需按 YAML 规则处理。不要把实际密钥提交到版本库或粘贴进普通日志。
合并配置节点
示例展示的是需要修改的片段。一个 YAML 文件内已有 spring:、app: 或 art: 时,把字段合并到现有节点,不在末尾重复添加同名顶层节点。缩进使用空格;password: "" 才表示空密码,中文说明不能作为密码原样粘贴。
开发与生产地址有什么区别
| 谁连接服务 | MySQL 地址 | Redis 地址 |
|---|---|---|
| 本机 Java → 开发 Docker | 127.0.0.1:3306,或自己改过的本机端口 | 127.0.0.1:16379 |
| 随包生产 Java 容器 → 同编排服务 | mysql:3306 | redis:6379 |
| JAR / 独立容器 → 客户已有服务 | 客户实际可达地址 | 客户实际可达地址 |
容器内的 127.0.0.1 指容器自身;mysql、redis 是随包网络中的服务名。本机 Java 无法直接按这些服务名找到 Docker 内服务。
启动目录与加载方式
脚本和随包 IDE 配置显式加载根目录 config/。手动运行 JAR 时使用:
java -jar art-admin.jar --spring.profiles.active=prod --spring.config.additional-location=file:./config/相对配置路径依赖启动目录,先确认当前目录包含 config/。spring.config.additional-location 用于追加配置位置,不要误用 spring.config.location 替换默认搜索位置。
本地上传相对路径按源码根目录或 JAR 所在目录解析,与配置文件查找规则不同。生产建议显式设置持久化绝对路径。
修改后如何生效
开发修改后重启 Java 应用。Docker 仅改应用参数时执行 sh scripts/deploy.sh config,它使用已有镜像先检查再更新;首次缺少镜像使用 update。
配置检查通过只表示配置可加载和约束满足,不证明数据库密码、存储桶权限或外部模型真实可用。随后验证健康检查、登录及对应业务。
配置生效的检查顺序
- 确认启动环境是
dev还是prod,修改的是对应的实际 YAML。 - 确认运行配置显式加载根目录
config/,没有被命令行或环境变量覆盖。 - 查看启动错误中的属性名,检查层级、类型和必填项。
- 健康检查通过后,实际执行所修改功能,例如上传文件或请求 AI。
--check-config 只读取并验证配置,不会连接外部服务。检查通过后仍报 Access denied,应核对数据库账号及实际密码,参见 常见问题。
