--- #################### 注册中心 + 配置中心相关配置 ####################

spring:
  cloud:
    nacos:
      discovery:
        enabled: false # 禁用 Nacos 服务发现，本地开发不需要 Nacos
      config:
        enabled: false # 禁用 Nacos 配置中心，本地开发不需要 Nacos
        import-check:
          enabled: false # 禁用 Nacos 配置检查，本地开发不需要 Nacos
    openfeign:
      enabled: true # 启用 Feign 客户端
      client:
        config:
          # OAuth2TokenCommonApi 通过 Feign 调用用户服务（因为 Token 表在用户服务）
          # 注意：OAuth2TokenCommonApi 的 @FeignClient 使用的是 RpcConstants.SYSTEM_NAME
          # 但我们需要让它指向用户服务，所以需要在配置中指定
          system-server:  # 将 system-server 映射到用户服务地址
            url: http://localhost:18080
          user-server:
            url: http://localhost:18080  # 本地开发时，直接指定用户服务地址
          xdz-user-server:  # 会员管理相关的 Feign 客户端使用 xdz-user-server
            url: http://localhost:18080  # 本地开发时，直接指定用户服务地址
          xdz-vehicle-server:  # 车辆服务（无 context-path）
            url: http://localhost:18083  # 本地开发时，直接指定车辆服务地址
          xdz-message-server:  # 消息服务（无 context-path）
            url: http://localhost:18082  # 本地开发时，直接指定消息服务地址
      default-to-properties: false # 禁用默认配置，使用自定义配置

--- #################### 服务间 JWT 配置 ####################

xdz:
  security:
    service-jwt:
      enabled: true # 启用服务间 JWT 验证
      private-key-path: classpath:jwt/service_jwt_private_key.pem # 私钥路径（用于生成 Token）
      public-key-path: classpath:jwt/service_jwt_public_key.pem # 公钥路径（用于验证 Token）
      expire-time: 3600 # Token 过期时间（秒），默认 1 小时

--- #################### 数据库相关配置 ####################
spring:

  # 数据源配置项
  autoconfigure:
    exclude:
      - com.xindazhou.framework.apilog.config.XdzApiLogRpcAutoConfiguration # 禁用 Feign 客户端自动配置，使用本地实现
      # 禁用 XdzSecurityRpcAutoConfiguration，避免 OAuth2TokenCommonApi 的 Feign 客户端与本地实现冲突
      # LoginUserRequestInterceptor 已在 RpcConfiguration 中手动注册
      - com.xindazhou.framework.security.config.XdzSecurityRpcAutoConfiguration
  datasource:
    druid: # Druid 【监控】相关的全局配置
      web-stat-filter:
        enabled: true
      stat-view-servlet:
        enabled: true
        allow: # 设置白名单，不填则允许所有访问
        url-pattern: /druid/*
        login-username: # 控制台管理用户名和密码
        login-password:
      filter:
        stat:
          enabled: true
          log-slow-sql: true # 慢 SQL 记录
          slow-sql-millis: 100
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
    dynamic: # 多数据源配置
      druid: # Druid 【连接池】相关的全局配置
        initial-size: 1 # 初始连接数
        min-idle: 1 # 最小连接池数量
        max-active: 20 # 最大连接池数量
        max-wait: 60000 # 配置获取连接等待超时的时间，单位：毫秒（1 分钟）
        time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位：毫秒（1 分钟）
        min-evictable-idle-time-millis: 600000 # 配置一个连接在池中最小生存的时间，单位：毫秒（10 分钟）
        max-evictable-idle-time-millis: 1800000 # 配置一个连接在池中最大生存的时间，单位：毫秒（30 分钟）
        validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
        test-while-idle: true
        test-on-borrow: false
        test-on-return: false
        pool-prepared-statements: true # 是否开启 PreparedStatement 缓存
        max-pool-prepared-statement-per-connection-size: 20 # 每个连接缓存的 PreparedStatement 数量
      primary: master
      datasource:
        master:
          url: jdbc:mysql://127.0.0.1:3306/xdz_business?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8
          username: root
          password: Xiuxiu@087
        # 社区模块数据源（社区表也在xdz_business数据库中，使用同一个数据源）
        slave: # 模拟从库，可根据自己需要修改
          lazy: true # 开启懒加载，保证启动速度
          url: jdbc:mysql://127.0.0.1:3306/xdz_business?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8
          username: root
          password: Xiuxiu@087

  # Redis 配置。Redisson 默认的配置足够使用，一般不需要进行调优
  data:
    redis:
      host: 127.0.0.1 # 地址
      port: 6379 # 端口
      database: 0 # 数据库索引
      # password: # 密码，建议生产环境开启（如果 Redis 设置了密码，请填写）。本地 Redis 无密码，注释掉

--- #################### MQ 消息队列相关配置 ####################

# rocketmq 配置项，对应 RocketMQProperties 配置类
rocketmq:
  name-server: 127.0.0.1:9876 # RocketMQ Namesrv

spring:
  # RabbitMQ 配置项，对应 RabbitProperties 配置类
  rabbitmq:
    host: 127.0.0.1 # RabbitMQ 服务的地址
    port: 5672 # RabbitMQ 服务的端口
    username: guest # RabbitMQ 服务的账号
    password: guest # RabbitMQ 服务的密码
  # Kafka 配置项，对应 KafkaProperties 配置类
  kafka:
    bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址，可以设置多个，以逗号分隔

--- #################### 定时任务相关配置 ####################
xxl:
  job:
    enabled: false # 是否开启调度中心，默认为 true 开启
    admin:
      addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址

--- #################### 服务保障相关配置 ####################

# Lock4j 配置项
lock4j:
  acquire-timeout: 3000 # 获取分布式锁超时时间，默认为 3000 毫秒
  expire: 30000 # 分布式锁的超时时间，默认为 30 毫秒

--- #################### 监控相关配置 ####################

# Actuator 监控端点的配置项
management:
  endpoints:
    web:
      base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
      exposure:
        include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ，可以开放所有端点。

# Spring Boot Admin 配置项
spring:
  boot:
    admin:
      # Spring Boot Admin Client 客户端的相关配置
      client:
        instance:
          service-host-type: IP # 注册实例时，优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME]
        username: admin
        password: admin
      # Spring Boot Admin Server 服务端的相关配置
      context-path: /admin # 配置 Spring

# 日志文件配置
logging:
  level:
    # 配置自己写的 MyBatis Mapper 打印日志
    com.xindazhou.business.dal.mysql: DEBUG
    com.xindazhou.business.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info，避免和 GlobalExceptionHandler 重复打印
    com.xindazhou.business.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info
    org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO hmy：先禁用，Spring Boot 3.X 存在部分错误的 WARN 提示

--- #################### xdz相关配置 ####################

# 新大洲配置项，设置当前项目所有自定义的配置
xdz:
  env: # 多环境的配置项
    tag: ${HOSTNAME}
  security:
    mock-enable: true
    oauth2-jwt:
      enabled: true # 启用 OAuth2 JWT Token 验证（统一使用 JWT 格式）
      public-key-path: classpath:jwt/oauth2_jwt_public_key.pem # 公钥路径（用于验证 Token，业务服务不需要私钥）
  access-log: # 访问日志的配置项
    enable: true # 启用 API 访问日志（使用本地服务，不通过 Feign）
  tenant: # 多租户相关配置项
    enable: false # 本地开发暂时禁用多租户
    ignore-urls: # 需要忽略多租户的请求（即使启用多租户，这些 URL 也不需要传递 tenant-id）
      - /admin-api/system/auth/login # 登录接口
      - /admin-api/system/auth/logout # 登出接口
      - /admin-api/system/auth/refresh-token # 刷新令牌接口
      - /admin-api/system/auth/get-permission-info # 获取权限信息接口
  websocket:
    enable: true # websocket的开关
    path: /business/ws # 路径
    sender-type: local # 消息发送的类型，可选值为 local、redis、rocketmq、kafka、rabbitmq
--- #################### 微信相关配置 ####################
# 微信配置（如果不需要可以留空，但需要配置 appid 和 secret 避免启动错误）
wx:
  mp:
    config-storage:
      type: memory
    app-id: "dummy-appid" # 临时配置，避免启动错误
    secret: "dummy-secret" # 临时配置，避免启动错误
