配置说明
本页按应用分单元说明 DaxPay 各应用的配置体系。主应用配置最丰富(Profile、数据库、Redis、消息队列、密钥、监控等),通道子应用与前端应用列出各自配置文件位置与关键差异。
📷 [配图]:配置文件全景图 —— 展示各应用配置文件在工作区中的位置分布,以及主应用与通道子应用、前端的配置依赖关系
配置文件位置一览
| 应用 | 配置文件位置 | 说明 |
|---|---|---|
| 主应用 dax-pay-open | dax-pay-open/daxpay-start/src/main/resources/ | application.yml + application-dev.yml + application-prod.yml |
| dax-pay-channel-one | dax-pay-channel-one/daxpay-channel-start/src/main/resources/ | 同上 Profile 结构 |
| dax-pay-channel-two | dax-pay-channel-two/daxpay-channel-start/src/main/resources/ | 同上 Profile 结构 |
| dax-pay-channel-one-go | dax-pay-channel-one-go/configs/config.yaml | YAML 配置,可用 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 | 关闭 | 关闭 |
切换方式:
# 命令行
mvnd spring-boot:run -Dspring-boot.run.profiles=prod
# 环境变量
SPRING_PROFILES_ACTIVE=prod
# 环境变量(Spring Boot 风格)
export SPRING_PROFILES_ACTIVE=prod各应用端口
| 应用 | 端口 | Health |
|---|---|---|
| 主应用 dax-pay-open | 9999 | http://127.0.0.1:9999/actuator/health |
| 通道子应用 dax-pay-channel-one | 20100 | http://127.0.0.1:20100/actuator/health |
| 通道子应用 dax-pay-channel-two | 20200 | http://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:
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 配置
spring:
data:
redis:
host: localhost
port: 6379
database: 0
password: your_password
lettuce:
pool:
max-wait: 1000msArtemis 消息队列
Artemis 用于支付延时通知等 JMS 消息场景,Docker 部署参考 Docker 部署:
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 调用通道子应用,路由配置:
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.*:
超级管理员
daxpay:
platform:
starter:
auth:
enable-admin: true # 是否开启超级管理员(生产必须关闭)
admin-in-list: true # 用户列表中是否显示超管RSA 证书
用于 API 接口请求/响应签名:
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-----'生产环境通过环境变量注入:
RSA_PRIVATE_KEY='-----BEGIN PRIVATE KEY-----...'
RSA_PUBLIC_KEY='-----BEGIN PUBLIC KEY-----...'数据加密
业务敏感字段(通道密钥、凭据、社交登录配置等)采用 AES-256-GCM 透明加密存储,由 MyBatis-Plus TypeHandler 在读写时自动加解密,业务层无感。
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列表后需重启生效;系统不提供管理端轮换入口,也不提供历史数据重新加密服务
异常信息显示
daxpay:
platform:
common:
exception:
show-full-message: true # dev 开启 / prod 关闭API 文档控制
# 系统默认使用 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
监控端点
# dev: 全景端点(排障友好)
management:
endpoints:
web:
exposure:
include: >
health,info,httpexchanges,
metrics,loggers,threaddump,
beans,mappings,scheduledtasks,
caches,conditions,startup
endpoint:
health:
show-details: always# 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 仅配置启动期固定项,会话与安全策略由管理端「安全配置」菜单动态管理:
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 zone及java.util.Date/LocalDateTime
生产环境变量清单
生产环境所有凭证通过环境变量注入,以下为 application-prod.yml 中定义的全部占位符:
| 变量 | 说明 | 默认值 |
|---|---|---|
SERVER_PORT | 服务端口 | 9999 |
DB_HOST | 数据库主机 | postgresql |
DB_PORT | 数据库端口 | 5432 |
DB_NAME | 数据库名 | daxpay-prod |
DB_USERNAME | 数据库账号 | (必填) |
DB_PASSWORD | 数据库密码 | (必填) |
REDIS_HOST | Redis 主机 | redis |
REDIS_PORT | Redis 端口 | 6379 |
REDIS_DATABASE | Redis 库编号 | 0 |
REDIS_PASSWORD | Redis 密码 | (必填) |
ARTEMIS_BROKER_URL | Artemis broker 地址 | tcp://artemis:61616 |
ARTEMIS_USER | Artemis 账号 | (必填) |
ARTEMIS_PASSWORD | Artemis 密码 | (必填) |
RSA_PRIVATE_KEY | RSA 私钥(PEM) | (必填) |
RSA_PUBLIC_KEY | RSA 公钥(PEM) | (必填) |
ENCRYPT_KEY | AES 加密密钥(32 字节) | (必填) |
IP2REGION_FILE_PATH | IP 地址库路径 | /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
| 配置项 | 值 | 说明 |
|---|---|---|
| 端口 | 20100 | application.yml 中 server.port |
| 数据库 | 与主应用同库 | dev daxpay-dev / prod daxpay-prod |
| Profile | dev / prod | 同主应用切换方式 |
凭证注入
通道子应用的生产环境凭证(DB / Redis 等)同样通过环境变量注入,变量名与主应用一致。Docker 部署时通过 env_file 共享同一份 .env。
dax-pay-channel-two
| 配置项 | 值 | 说明 |
|---|---|---|
| 端口 | 20200 | application.yml 中 server.port |
| 数据库 | 与主应用同库 | dev daxpay-dev / prod daxpay-prod |
| Profile | dev / 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 指定其他路径。
# 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_KEY | store 持久化加密密钥 | 自定义 |
开发环境(.env.development)补充:
| 变量 | 说明 | 值 |
|---|---|---|
VITE_PORT | dev 端口 | 运营端 6999 / 商户端 7999 |
VITE_GLOB_API_URL | 接口地址前缀 | /api |
VITE_NITRO_MOCK | 是否开启 Mock 服务 | true |
VITE_INJECT_APP_LOADING | 注入全局 loading | true |
商户端(apps/daxpay-merchant/.env)结构相同,差异:
| 变量 | 商户端值 |
|---|---|
VITE_APP_TITLE | DaxPay Merchant |
VITE_APP_NAMESPACE | daxpay-web-merchant |
VITE_APP_CLIENT_CODE | merchant |
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_PORT | dev 端口 | 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) |
| 国际化 | 仅中英 |
构建命令详见 项目构建 - 收银小程序。