Skip to content

配置说明

更新时间:2026/9/9 21:36:00

本页按应用分单元说明 DaxPay 各应用的配置体系。主应用配置最丰富(Profile、数据库、Redis、消息队列、密钥、监控等),通道子应用与前端应用列出各自配置文件位置与关键差异。

阅读建议

首次部署只需关注 主应用配置生产环境变量清单;其余应用按需查阅。

配置文件位置一览

应用配置文件位置说明
主应用 dax-pay-opendax-pay-open/daxpay-start/src/main/resources/application.yml + application-dev.yml + application-prod.yml
dax-pay-channel-onedax-pay-channel-one/daxpay-channel-start/src/main/resources/同上 Profile 结构
dax-pay-channel-twodax-pay-channel-two/daxpay-channel-start/src/main/resources/同上 Profile 结构
dax-pay-channel-threedax-pay-channel-three/daxpay-channel-start/src/main/resources/同上 Profile 结构(国际通道 Stripe)
dax-pay-channel-one-godax-pay-channel-one-go/configs/config.yamlYAML 配置,可用 DAXPAY_CONFIG 环境变量指定路径
dax-pay-channel-two-godax-pay-channel-two-go/configs/config.yaml同上,第二通道 Go 实验副本
Web 管理端(运营端)dax-pay-ui/apps/daxpay-admin/.env*.env / .env.development / .env.production
Web 管理端(商户端)dax-pay-ui/apps/daxpay-merchant/.env*同上,VITE_APP_CLIENT_CODE=merchant
H5 端dax-pay-h5/.env*.env / .env.development
uni-app 管理端dax-pay-app-admin/env/.env*unibest 约定的 env/ 目录
uni-app 商户端dax-pay-app-merchant/env/.env*同上
收银台小程序dax-pay-mini-cashier/env/.env*同上

配置依赖关系

各应用配置不是孤立的:前端 .env 的 API 地址决定请求打到哪,主应用通过 daxpay.channel.* 路由与传输密钥对接各通道子应用:


主应用配置

主应用通过 Spring Profile 区分环境,核心配置集中在 daxpay-start/src/main/resources/

Profile 体系

Profile说明监控端点日志级别API 文档超管
dev(默认)本地开发,排障友好全开业务包 DEBUG开启开启
prod生产,凭证强制环境变量注入,优雅停机收紧(health/info/metrics)业务包 INFO关闭关闭

切换方式:

bash
# 命令行
mvnd spring-boot:run -Dspring-boot.run.profiles=prod

# 环境变量
SPRING_PROFILES_ACTIVE=prod

# 环境变量(Spring Boot 风格)
export SPRING_PROFILES_ACTIVE=prod

各应用端口

应用端口Health
主应用 dax-pay-open9999http://127.0.0.1:9999/actuator/health
通道子应用 dax-pay-channel-one20100http://127.0.0.1:20100/actuator/health
通道子应用 dax-pay-channel-two20200http://127.0.0.1:20200/actuator/health
通道子应用 dax-pay-channel-three20300http://127.0.0.1:20300/actuator/health
Web 运营端(dev)6999
Web 商户端(dev)7999
独立 H5 端(dev)9500
uni-app 管理端(H5 dev)9000
uni-app 商户端(H5 dev)9100

数据库配置

PostgreSQL + HikariCP

开发环境 application-dev.yml:

yaml
spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/daxpay-dev?autoReconnect=true&reWriteBatchedInserts=true
    username: your_username
    password: your_password
    hikari:
      minimumIdle: 5          # 最小连接数
      maximumPoolSize: 50     # 最大连接数
      leak-detection-threshold: 5000   # 连接泄漏检测(毫秒)
      connection-timeout: 30000       # 获取连接超时(毫秒)
      idle-timeout: 600000            # 空闲连接超时(毫秒)
      max-lifetime: 1800000           # 连接最大存活时间(毫秒)

仓库内 dev 文件使用 hosts 映射主机名

仓库中的 application-dev.yml 实际使用 postgresql / redis / mq 主机名(由本机 hosts 映射到中间件所在机器,下方 Redis 与 Artemis 示例同理)。自行搭建环境时,要么在 hosts 中添加对应映射,要么把主机名改回 localhost 并按实际情况修改账号密码。

Redis 配置

yaml
spring:
  data:
    redis:
      host: localhost
      port: 6379
      database: 0
      password: your_password
      lettuce:
        pool:
          max-wait: 1000ms

Artemis 消息队列

Artemis 用于支付延时通知等 JMS 消息场景:

yaml
spring:
  artemis:
    mode: native                              # 连接外部独立 broker(非嵌入式)
    broker-url: tcp://localhost:61616         # broker 连接地址
    user: admin
    password: admin
    pool:
      enabled: true
      max-connections: 10                     # 生产环境建议 20
      idle-timeout: 30s
  jms:
    cache:
      enabled: true
      session-cache-size: 10                  # 生产环境建议 20
    pub-sub-domain: false                     # 默认点对点 queue
    listener:
      auto-startup: true

通道子应用路由

主应用通过 HTTP 调用通道子应用,路由配置:

yaml
daxpay:
  channel:
    # 子应用1: 支付宝/微信/抖音/银联商务/银联(云闪付)直连通道(已启用)
    one:
      base-url: http://127.0.0.1:20100
      # 通道传输 AES 密钥(强制常开,生产由 CHANNEL_ONE_TRANSPORT_KEY 注入)
      transport-encrypt:
        key: 0123456789abcdef0123456789abcdef
    # 子应用2: 拉卡拉/海科融通/斗拱/乐刷/随行付/河马付/Adapay/富友/易宝等聚合通道(已启用)
    two:
      base-url: http://127.0.0.1:20200
      # 通道传输 AES 密钥(强制常开,生产由 CHANNEL_TWO_TRANSPORT_KEY 注入)
      transport-encrypt:
        key: fedcba9876543210fedcba9876543210
    # 子应用3: 国际支付通道(Stripe 等,已启用)
    three:
      base-url: http://127.0.0.1:20300
      # 通道传输 AES 密钥(强制常开,生产由 CHANNEL_THREE_TRANSPORT_KEY 注入)
      transport-encrypt:
        key: fedcba9876543210fedcba9876543210

三个子应用(one/two/three)默认均已启用,编号固定不可改名,与路由策略中的通道分配一一对应。每个子应用的 transport-encrypt.key 强制常开,须与子应用侧配置一致;生产环境必须经 CHANNEL_ONE_TRANSPORT_KEY / CHANNEL_TWO_TRANSPORT_KEY / CHANNEL_THREE_TRANSPORT_KEY 注入(缺失启动失败)。

DaxPay 平台配置

命名空间 daxpay.platform.*:

超级管理员

yaml
daxpay:
  platform:
    starter:
      auth:
        enable-admin: true          # 是否开启超级管理员(生产必须关闭)
        admin-in-list: true         # 用户列表中是否显示超管

RSA 证书

用于 API 接口请求/响应签名:

yaml
daxpay:
  platform:
    config:
      key-config:
        private-key: '-----BEGIN PRIVATE KEY-----
          ...your private key...
          -----END PRIVATE KEY-----'
        public-key: '-----BEGIN PUBLIC KEY-----
          ...your public key...
          -----END PUBLIC KEY-----'

生产环境通过环境变量注入:

bash
RSA_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----...'
RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----...'

数据加密

业务敏感字段(通道密钥、凭据、社交登录配置等)采用 AES-256-GCM 透明加密存储,由 MyBatis-Plus TypeHandler 在读写时自动加解密,业务层无感。

yaml
daxpay:
  platform:
    config:
      encrypt:
        enable: true              # 启用后敏感字段写入自动加密、读取自动解密
        keys:                     # 密钥列表(支持滚动密钥,列表内版本号唯一)
          - key: your-current-32-byte-aes-key   # 当前密钥(加密新数据),32 字符
            version: 2
          - key: your-legacy-32-byte-aes-key    # 历史密钥(仅解密旧数据),32 字符
            version: 1

滚动密钥机制:

  • 密文以 v{版本号}:{base64(IV + AES-GCM 密文)} 格式存储,解密时按版本前缀匹配对应密钥
  • 列表第一项为当前密钥,负责加密新写入数据;其余为历史密钥,仅用于解密旧密文
  • 轮换密钥:生成新 32 字符密钥 → 用更大的 version 置于列表首位 → 保留旧密钥 → 重启应用;此后新数据用新密钥加密,历史密文仍可正常解密
  • 不可删除仍有对应密文的历史密钥,否则那部分历史数据将无法解密

两点注意

  • 启用后不要关闭 enable:关闭后已写入的密文读取时不再自动解密,会以密文原文返回
  • 密钥不支持在线热切换:配置在启动时加载为 Bean,修改 keys 列表后需重启生效;系统不提供管理端轮换入口,也不提供历史数据重新加密服务

异常信息显示

yaml
daxpay:
  platform:
    common:
      exception:
        show-full-message: true     # dev 开启 / prod 关闭

缓存配置

二级缓存架构(L1 Caffeine 本地缓存 + L2 Redis 共享缓存),统一由 daxpay.platform.common.cache.* 配置,各键均有默认值,默认整套缓存开启:

yaml
daxpay:
  platform:
    common:
      cache:
        enabled: true          # 总开关,默认 true;关闭后 L1+L2 全部退化为 NoOp(直接穿透到方法),用于排查/诊断
        l1:
          enabled: true        # L1 单独开关,默认 true;关闭后仅保留 L2 Redis(纯 Redis 模式)
          default-ttl: 60      # L1 默认超时(秒)
          maximum-size: 10000  # L1 默认最大容量(条)
        l2:
          default-ttl: 1800    # L2 默认超时(秒,30 分钟)
        secure-prefix: secure: # 敏感缓存名前缀,默认 secure:
        secure-names: []       # 额外视为敏感的 cacheName 精确列表(可选)

要点:

  • 总开关 enabled:L1 与 L2 是强绑定的整体(加速 + 共享),关闭后整套二级缓存退化为 NoOp,仅用于排查/诊断;L2 无单独开关,关 L2 等同于关总开关
  • L1 开关 l1.enabled:总开关开启时,可单独关闭 L1 仅保留 L2 Redis(纯 Redis 模式),适用强一致性要求 / 排查本地脏读 / 单机无本地加速诉求
  • 敏感缓存:名称匹配 secure-prefix(默认 secure:)或列入 secure-names 的缓存,L2 value 整包 AES-GCM 加密存储;数据加密未启用时,敏感缓存仅使用 L1、不写 Redis(安全降级),详见 FAQ - 为什么缓存会出现「只读 L1、不读写 Redis」的情况

API 文档控制

yaml
# 系统默认使用 springdoc,dev 开启 / prod 关闭
springdoc:
  api-docs:
    enabled: true                   # dev: true / prod: false
  swagger-ui:
    enabled: true                   # dev: true / prod: false
  default-flat-param-object: true   # 展开 GET 参数对象类型

dev 环境文档地址:http://127.0.0.1:9999/swagger-ui/index.html

监控端点

yaml
# dev: 全景端点(排障友好)
management:
  endpoints:
    web:
      exposure:
        include: >
          health,info,httpexchanges,
          metrics,loggers,threaddump,
          beans,mappings,scheduledtasks,
          caches,conditions,startup
  endpoint:
    health:
      show-details: always
yaml
# prod: 严格收紧
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics
  endpoint:
    health:
      show-details: never
      probes:
        enabled: true               # k8s liveness/readiness
      group:
        liveness:
          include: ping              # 仅进程存活,不级联 DB
        readiness:
          include: db,redis          # DB/Redis 就绪后才接流量

日志配置

日志策略由 logback-spring.xml 定义,按 Profile 区分:

  • dev:仅控制台输出,不落盘文件(避免历史脏日志残留)
  • prod:控制台(供 docker logs / kubectl logs 采集)+ 滚动文件。容器化配额收紧:主日志单文件 50MB、保留 7 天、总上限 600MB(.gz 压缩归档,启动时清理超期历史);独立 ERROR 日志保留 30 天、总上限 150MB
  • 异步写盘:主日志经 AsyncAppender 异步写盘(neverBlock=true,队列满不阻塞业务线程;discardingThreshold=0 不丢弃任何级别)
  • 日志目录:由环境变量 LOG_PATH-DLOG_PATH 指定,默认 /data/logs/daxpay(适配 Linux/Docker 挂载卷);Windows 本地切 prod 调试需覆盖为本地目录(如 LOG_PATH=./logs)
  • 日志级别:prod 业务包固定 INFO,第三方框架噪音(Spring / Hikari / MyBatis / Redis / Artemis / JMS)统一压制到 WARN;全局级别由 LOG_ROOT_LEVEL 环境变量注入(默认 INFO,生产不建议 DEBUG)

Sa-Token 认证

安全认证基于 Sa-Token。yml 仅配置启动期固定项,会话与安全策略由管理端「安全配置」菜单动态管理:

yaml
sa-token:
  token-name: Accesstoken           # token 名称(也是 cookie/请求头名),前端 SDK 硬依赖,不可变更
  timeout: 259200                   # token 有效期兜底(秒),仅会话管理未启用时生效;启用后以数据库配置为准
  is-log: false                     # Sa-Token 调试日志
  is-print: false                   # 启动 Banner

会话与安全策略由管理端配置(系统管理 → 安全配置,权限码 system:security-config,API 前缀 /platform/config/security),存储在 system_platform_config 表,登录时注入 Sa-Token:

配置组可配项说明
会话管理Token 有效期 / 活跃超时 / 最大并发会话数 / 并发策略 / 并发范围替代 yml timeout / active-timeout / is-concurrent,默认有效期 72h、活跃超时 24h、并发 5
登录安全登录失败锁定 / 验证码触发失败次数阈值、锁定时长、验证码触发次数
密码策略密码强度 / 轮换周期 / 历史次数最小长度、大小写/数字/特殊字符要求
双因素认证2FA (TOTP) 开关 / 发行者 / 备用码配合 Authenticator App
API 安全开放接口防重放Nonce 校验、请求时间窗口
支付安全支付风控黑名单阻断、IP 地区名单、海外 IP 拦截、支付前风险校验
IAM 防重放管理端接口防重放Nonce 有效期、时间戳容差

动态生效范围

管理端会话配置仅对新创建的登录会话生效,已登录用户的 token 保留原有超时/并发属性。is-share 固定为 false(按终端隔离会话),不可配。

接口请求/响应支持 RSA 签名,公钥通过 key-config 配置。

时区与时间

  • 数据库时间字段统一使用 timestamptz(6)(timestamp with time zone)
  • 实体类使用 java.time.OffsetDateTime
  • 序列化全局时区 UTC,Jackson OffsetDateTime → ISO UTC
  • 禁止使用 timestamp/timestamp without time zonejava.util.Date/LocalDateTime

生产环境变量清单

生产环境所有凭证通过环境变量注入,以下为 application-prod.yml 中定义的全部占位符:

变量说明默认值
SERVER_PORT服务端口9999
DEPLOY_MODE部署模式:PROD(启动期 fail-fast 校验,强制关闭沙箱/超管等开发态功能)/ DEV(仅本机联调)PROD
DB_HOST数据库主机postgresql
DB_PORT数据库端口5432
DB_NAME数据库名daxpay-prod
DB_USERNAME数据库账号(必填)
DB_PASSWORD数据库密码(必填)
REDIS_HOSTRedis 主机redis
REDIS_PORTRedis 端口6379
REDIS_DATABASERedis 库编号0
REDIS_PASSWORDRedis 密码(必填)
ARTEMIS_BROKER_URLArtemis broker 地址tcp://artemis:61616
ARTEMIS_USERArtemis 账号(建议必填,yml 默认空串)
ARTEMIS_PASSWORDArtemis 密码(建议必填,yml 默认空串)
LOG_ROOT_LEVEL日志级别(INFO / WARN / DEBUG,生产不建议 DEBUG)INFO
ENABLE_ADMIN是否开启超级管理员(仅 DEV 联调可开启,PROD 下开启会被拦截)false
IP2REGION_FILE_PATHIPv4 地址库路径/data/ip/ip2region_v4.xdb
IP2REGION_V6_FILE_PATHIPv6 地址库路径(可选,未配置时 IPv6 查询返回 null)/data/ip/ip2region_v6.xdb
IP2REGION_DATA_VERSIONIPv4 数据版本(open_source / base / high / pro,须与实际 xdb 文件档次一致)open_source
IP2REGION_V6_DATA_VERSIONIPv6 数据版本(可与 v4 不同,须与实际 xdb 文件一致)open_source
SANDBOX_ENABLED沙箱环境开关(仅 DEV 有效,PROD 下开启会被 DeploymentModeEnforcer 拦截)false
TRADE_SYNC_ENABLED交易定时同步开关(生产建议开启)true
RSA_PRIVATE_KEYRSA 私钥(PEM)(必填)
RSA_PUBLIC_KEYRSA 公钥(PEM)(必填)
ENCRYPT_KEYAES 加密密钥(32 字符)(必填)
CHANNEL_ONE_BASE_URL通道子应用 1 地址http://channel-one:20100
CHANNEL_ONE_TRANSPORT_KEYchannel-one 通道传输 AES 密钥(32 字符)(必填,缺失启动失败)
CHANNEL_TWO_BASE_URL通道子应用 2 地址http://channel-two:20200
CHANNEL_TWO_TRANSPORT_KEYchannel-two 通道传输 AES 密钥(32 字符)(必填,缺失启动失败)
CHANNEL_THREE_BASE_URL通道子应用 3 地址http://channel-three:20300
CHANNEL_THREE_TRANSPORT_KEYchannel-three 通道传输 AES 密钥(32 字符)(必填,缺失启动失败)

必填语义

表中标 (必填) 的变量在 application-prod.yml 中为 ${VAR:?missing VAR} 写法,缺失时应用启动直接报错,避免占位符字面量被绑定为非法值(如密钥长度不合法)。


通道子应用配置

通道子应用与主应用共享同一数据库,无需单独配置数据源库。各自配置文件位于 daxpay-channel-start/src/main/resources/,Profile 结构与主应用一致(dev / prod)。

dax-pay-channel-one

配置项说明
端口20100application.ymlserver.port
数据库与主应用同库dev daxpay-dev / prod daxpay-prod
Profiledev / prod同主应用切换方式

凭证注入

通道子应用的生产环境凭证(DB / Redis 等)同样通过环境变量注入,变量名与主应用一致。Docker 部署时通过 env_file 共享同一份 .env

dax-pay-channel-two

配置项说明
端口20200application.ymlserver.port
数据库与主应用同库dev daxpay-dev / prod daxpay-prod
Profiledev / prod同主应用切换方式

channel-two 已在主应用默认配置中启用(无需取消注释)。生产环境子应用地址经 CHANNEL_TWO_BASE_URL 注入,与子应用通信的传输加密密钥经 CHANNEL_TWO_TRANSPORT_KEY 注入(必填,须与子应用侧一致)。

dax-pay-channel-three

配置项说明
端口20300application.ymlserver.port
数据库与主应用同库dev daxpay-dev / prod daxpay-prod
Profiledev / prod同主应用切换方式

承载国际支付通道(Stripe 等)。同样已在主应用默认配置中启用,生产环境经 CHANNEL_THREE_BASE_URLCHANNEL_THREE_TRANSPORT_KEY(必填)注入。

dax-pay-channel-one-go(Go 版)

Go 版配置文件为 configs/config.yaml,YAML 格式,对标 Java 版 application.yml。可用环境变量 DAXPAY_CONFIG 指定其他路径。

yaml
# dax-pay-channel-one-go 配置(对标 Boot application.yml)
server:
  port: 20100

tracing:
  # 全采样,便于本地排障(对标 management.tracing.sampling.probability: 1.0)
  sample_ratio: 1.0
  # 默认不导出 OTLP(对标 otlp.enabled: false),仅进程内 span + 日志关联
  otlp_enabled: false

# 主应用 ↔ 子应用 报文透明加密(AES-256-GCM,强制常开)
# key 须恰好 32 字节;生产环境用环境变量 CHANNEL_TRANSPORT_KEY 覆盖
channel:
  transport-encrypt:
    key: 0123456789abcdef0123456789abcdef

传输加密密钥须与主应用侧 daxpay.channel.one.transport-encrypt.key(生产为 CHANNEL_ONE_TRANSPORT_KEY 注入)保持一致,否则主应用与子应用间报文解密失败。

与 Java 版互斥

Go 版端口、路由与 Java 版 channel-one 完全重叠,部署时二选一,切勿同时启动。


前端应用配置

前端应用配置以 Vite 环境变量(.env* 文件)为主,构建期注入。

Web 管理端 dax-pay-ui

运营端与商户端共用同一 monorepo,通过环境变量 VITE_APP_CLIENT_CODE 区分端身份。

运营端(apps/daxpay-admin/.env):

变量说明运营端值
VITE_APP_TITLE应用标题DaxPay Admin
VITE_APP_NAMESPACE命名空间(缓存/store 前缀,隔离)daxpay-web-admin
VITE_APP_CLIENT_CODE客户端身份码(对齐后端 ClientEnum)admin
VITE_APP_STORE_SECURE_KEYstore 持久化加密密钥自定义

开发环境(.env.development)补充:

变量说明
VITE_PORTdev 端口运营端 6999 / 商户端 7999
VITE_GLOB_API_URL接口地址前缀/api
VITE_NITRO_MOCK是否开启 Mock 服务true
VITE_INJECT_APP_LOADING注入全局 loadingtrue

商户端(apps/daxpay-merchant/.env)结构相同,差异:

变量商户端值
VITE_APP_TITLEDaxPay Merchant
VITE_APP_NAMESPACEdaxpay-web-merchant
VITE_APP_CLIENT_CODEmerchant
VITE_PORT(dev)7999

端级隔离

两端共用 packages/ 框架包,通过 VITE_APP_CLIENT_CODE 构建期注入请求头与登录参数,配合后端 iam_perm_menu.client_code 实现菜单/数据端级隔离。

两端 .env 的差异见上方三张表,端级隔离的完整链路如下:

移动 H5 端 dax-pay-h5

配置文件位于 dax-pay-h5/.env / .env.development / .env.production

变量说明
VITE_PORTdev 端口9500
VITE_PROXYdev 跨域代理/apihttp://127.0.0.1:9999/(本地主应用)

H5 端单一产物同时包含 PC 与移动页面,由运行时设备探测分发,无需按设备分别配置。

uni-app 管理端 dax-pay-app-admin

配置文件位于 dax-pay-app-admin/env/(unibest 约定目录),按 unibest.platforms 字段决定可编译目标。

配置说明
env/.env基础环境变量(VITE_APP_PORT=9000 等)
编译目标H5 / 微信小程序 / 支付宝小程序 / 抖音小程序 / App
国际化全端 10 语种;小程序端条件编译仅中英

构建命令详见 跨端应用

uni-app 商户端 dax-pay-app-merchant

配置文件位于 dax-pay-app-merchant/env/,结构与 uni-app 管理端一致。

配置说明
env/.env基础环境变量(VITE_APP_PORT=9100 等)
编译目标H5 / 微信小程序 / 支付宝小程序 / 抖音小程序 / App
国际化全端 10 语种;小程序端条件编译仅中英

构建命令详见 跨端应用

收银台小程序 dax-pay-mini-cashier

配置文件位于 dax-pay-mini-cashier/env/,结构与其他 uni-app 客户端一致。

配置说明
编译目标微信小程序 / 支付宝小程序 / 抖音小程序(无 H5 / App)
国际化仅中英

构建命令详见 跨端应用


相关章节

官方网站 · 基于 GNU LGPL v3.0 协议开源