application-local.yaml 4.2 KB
# ========== 本地开发环境配置 ==========
# ⚠️ 禁止在此文件中提交真实生产密码。生产环境通过环境变量/配置中心注入。
spring:
  # ========== 数据源(Druid + MySQL 8)==========
  # 停车六库已合并为单库 parking_cloud(表前缀 sys_/park_/pay_/order_/bill_/charge_ 区分)
  datasource:
    druid:
      url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:parking_cloud}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
      username: ${DB_USERNAME:root}
      password: ${DB_PASSWORD:}
      driver-class-name: com.mysql.cj.jdbc.Driver
      # 连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat,wall
      # 监控页面:本地开启,生产关闭
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        login-username: ${DRUID_USERNAME:admin}
        login-password: ${DRUID_PASSWORD:admin}
        reset-enable: false
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

  # ========== Redis ==========
  redis:
    host: ${REDIS_HOST:127.0.0.1}
    port: ${REDIS_PORT:6379}
    database: ${REDIS_DATABASE:0}
    # ⚠️ 本地 Redis 无密码,这里必须【整行注释】而不是写成 `${REDIS_PASSWORD:}`:
    #    后者解析成空字符串 ""(非 null),Redisson 会因此发送 AUTH "",
    #    Redis 返回 "ERR AUTH <password> called without any password configured",启动直接失败。
    # password: ${REDIS_PASSWORD}
    timeout: 5000ms
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-wait: 3000ms

# ========== 刷新缓存共享密钥(仅本地/测试)==========
# 老门户 `RefreshCacheController` 的 4 条 `@NoAuth` 端点自带一串写死的 32 位共享密钥;
# 迁移时按 AGENTS.md「批 6 第三十四切片」④ 的 (B) 方案改成**配置化**(代码里零密钥,红线 11)。
# ⚠️ 这里是**本地测试值**,不是任何环境的真实密钥;生产**不配**即 fail-closed
#    (任何请求都回 "token不正确"),部署时用 `PARKING_REFRESH_CACHE_TOKEN` 或
#    `--parking.refresh-cache.token=...` 配成现网原串即可让老前端/运维脚本零改造。
# ⚠️ 冒烟脚本 `tools/api_smoke.py` 用的是同一个值;改这里必须同步改那边。
parking:
  refresh-cache:
    token: ${REFRESH_CACHE_TOKEN:local-refresh-cache-test-token}
  # ========== 老新组织 id 换算表(仅本地/测试)==========
  # 新 `system_org` 只有 1 行 id=1,而存量业务表存的是老 `sys_org.id`(本机镜像里
  # 10003 有 498 条 `td_b_api_log`、92 个区块;10007 有 2 条日志)。不配这项时
  # `LoginUserBridge` 恒等映射(= 与改造前完全一致,存量接口按 org 过滤会查空)。
  # ⚠️ 这里是**本地镜像的测试映射**,不是生产口径;生产用 `LEGACY_ORG_ID_MAPPING`
  #    或 `--parking.legacy.org-id-mapping=...` 按实际上线数据配置,格式 `新id:老id,...`。
  # ========== 老新操作员 id 换算表(仅本地/测试)==========
  # 新 `system_users` 只有 admin(id=1),本机 `sys_op` 是空表,没有真实老 id 可对。
  # 这里给一个**本地测试值**,只为验证换算链路真的生效(opId 会写进审计列);
  # 它不是生产口径,生产必须按真实 `sys_op` 数据用 `LEGACY_OP_ID_MAPPING` 配置。
  legacy:
    org-id-mapping: ${LEGACY_ORG_ID_MAPPING:1:10003}
    op-id-mapping: ${LEGACY_OP_ID_MAPPING:1:10001}

# ========== 日志级别 ==========
logging:
  level:
    root: info
    com.zteits.parking: debug
    # 打开后可以看到 SQL 语句
    com.zteits.parking.framework.mybatis: debug
    org.springframework.security: info