Skip to content

应用配置 ​

日常只维护根目录的实际配置:开发用 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 的代理:

yaml
server:
  port: 13002 # 本机 Java 的监听端口
dotenv
VITE_API_PROXY_URL = http://localhost:13002

重启两个开发服务,访问 http://localhost:13002/actuator/health,再验证前端登录。此例用于本机 Java;随包生产 Docker 应调整宿主机映射,不修改内部端口。

例:生产 Docker 对外使用 14001 ​

在 deploy/compose.prod.yml 的现有 services.app 下修改 ports:

yaml
services:
  app:
    ports:
      - "127.0.0.1:14001:13001" # 宿主机 14001 → 容器 13001

保留同一文件的其他配置,执行 sh scripts/deploy.sh config,将 Nginx upstream 同步改为 127.0.0.1:14001。

常用参数 ​

属性作用
server.portJava 服务端口,默认 13001
spring.datasource.druid.url/username/passwordMySQL 地址、数据库与应用账号
spring.data.redis.host/port/password/databaseRedis 连接与逻辑库
art.cache.key-prefix缓存、登录态、验证码、临时凭证及任务锁的环境隔离
app.upload-path本地上传目录,生产使用持久化目录
app.web.cors.allowed-origins允许的完整前端 Origin,多个值逗号分隔
app.auth.refresh-cookie-secureHTTPS 生产保持 true,本地 HTTP 开发配置为 false
art.storage.typelocal、minio、aliyun
art.ai-assistant上游地址、模型、密钥、超时与并发
app.notification.stream-token-secret通知流临时凭证签名密钥
app.mall.payment.credential-keyBase64 编码的 32 字节支付凭据加密密钥
app.crypto.private-key-path持久化 RSA 私钥文件路径
app.deployment.multi-instance是否启用多实例配置检查
app.deployment.shared-local-storage声明所有实例确实挂载同一文件目录

自备数据服务示例 ​

以下仅演示结构,替换占位值:

yaml
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 → 开发 Docker127.0.0.1:3306,或自己改过的本机端口127.0.0.1:16379
随包生产 Java 容器 → 同编排服务mysql:3306redis:6379
JAR / 独立容器 → 客户已有服务客户实际可达地址客户实际可达地址

容器内的 127.0.0.1 指容器自身;mysql、redis 是随包网络中的服务名。本机 Java 无法直接按这些服务名找到 Docker 内服务。

启动目录与加载方式 ​

脚本和随包 IDE 配置显式加载根目录 config/。手动运行 JAR 时使用:

bash
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。

配置检查通过只表示配置可加载和约束满足,不证明数据库密码、存储桶权限或外部模型真实可用。随后验证健康检查、登录及对应业务。

下一步:文件存储、AI 与通知、部署运维。

配置生效的检查顺序 ​

  1. 确认启动环境是 dev 还是 prod,修改的是对应的实际 YAML。
  2. 确认运行配置显式加载根目录 config/,没有被命令行或环境变量覆盖。
  3. 查看启动错误中的属性名,检查层级、类型和必填项。
  4. 健康检查通过后,实际执行所修改功能,例如上传文件或请求 AI。

--check-config 只读取并验证配置,不会连接外部服务。检查通过后仍报 Access denied,应核对数据库账号及实际密码,参见 常见问题。

根据 MIT 许可证发布