Skip to content

配置说明

更新时间:2026/7/26 16:29:53

本页按应用分单元说明 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-one-godax-pay-channel-one-go/configs/config.yamlYAML 配置,可用 DAXPAY_CONFIG 环境变量指定路径
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
小程序管理端dax-pay-app-admin/env/.env*unibest 约定的 env/ 目录
收银小程序dax-pay-cashier/env/.env*同上

主应用 dax-pay-open 配置

主应用通过 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
Web 运营端(dev)6999
Web 商户端(dev)7999
H5 端(dev)9500
小程序管理端(H5 dev)9000
文档站(dev)5173

数据库配置

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           # 连接最大存活时间(毫秒)

Redis 配置

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

Artemis 消息队列

Artemis 用于支付延时通知等 JMS 消息场景,Docker 部署参考 Docker 部署:

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
    # 子应用2: 银联 + 拉卡拉(可扩展,取消注释启用)
    # two:
    #   base-url: http://127.0.0.1:20200
    # 子应用3: 抖音 + 其他通道(未来扩展,取消注释启用)
    # three:
    #   base-url: http://127.0.0.1:20300

子应用编号(one/two/three)固定不可改名,与路由策略中的通道分配一一对应。

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 关闭

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 就绪后才接流量

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 校验、请求时间窗口
支付安全支付风控黑名单阻断、OpenID 拦截级别、海外 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
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 账号(必填)
ARTEMIS_PASSWORDArtemis 密码(必填)
RSA_PRIVATE_KEYRSA 私钥(PEM)(必填)
RSA_PUBLIC_KEYRSA 公钥(PEM)(必填)
ENCRYPT_KEYAES 加密密钥(32 字节)(必填)
IP2REGION_FILE_PATHIP 地址库路径/data/ip/ip2region_v4.xdb
CHANNEL_ONE_BASE_URL通道子应用 1 地址http://channel-one:20100
CHANNEL_TWO_BASE_URL通道子应用 2 地址http://channel-two:20200

通道子应用配置

通道子应用与主应用共享同一数据库,无需单独配置数据源库。各自配置文件位于 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 时,需在主应用 application.yml 取消 daxpay.channel.two.base-url 的注释,并通过 CHANNEL_TWO_BASE_URL 环境变量注入地址。

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

与 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 实现菜单/数据端级隔离。

📷 [配图]:Web 管理端双端配置对照 —— 展示运营端与商户端 .env 差异、client_code 注入链路与后端端级隔离机制

移动 H5 端 dax-pay-h5

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

变量说明
VITE_PORTdev 端口9500

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

小程序管理端 dax-pay-app-admin

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

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

构建命令详见 项目构建 - 小程序管理端

收银小程序 dax-pay-cashier

配置文件位于 dax-pay-cashier/env/,结构与小程序管理端一致。

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

构建命令详见 项目构建 - 收银小程序


下一步

基于 GNU LGPL v3.0 协议开源