# 项目相关配置
maintain:
  # 名称
  name: maintain-project
  # 版本
  version: ${maintain-vue-plus.version}
  # 版权年份
  copyrightYear: 2023
  # 缓存懒加载
  cacheLazy: false

captcha:
  # 页面 <参数设置> 可开启关闭 验证码校验
  # 验证码类型 math 数组计算 char 字符验证
  type: MATH
  # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
  category: CIRCLE
  # 数字验证码位数
  numberLength: 1
  # 字符验证码长度
  charLength: 4

# 开发环境配置
server:
  # 服务器的HTTP端口，默认为8080
  port: 8099
  servlet:
    # 应用的访问路径
    context-path: /
  # undertow 配置
  undertow:
    # HTTP post内容的最大大小。当值为-1时，默认值为大小是无限的
    max-http-post-size: -1
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分
    buffer-size: 512
    # 是否分配的直接内存
    direct-buffers: true
    threads:
      # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
      io: 8
      # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
      worker: 256

# 日志配置
logging:
  level:
    com.maintain: @logging.level@
    org.springframework: warn
  config: classpath:logback-plus.xml

# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间（默认10分钟）
    lockTime: 10

# Spring配置
spring:
  application:
    name: ${maintain.name}
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  profiles:
    active: prod
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 10MB
      # 设置总上传的文件大小
      max-request-size: 20MB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  mvc:
    format:
      date-time: yyyy-MM-dd HH:mm:ss
  jackson:
    # 日期格式化
    date-format: yyyy-MM-dd HH:mm:ss
    serialization:
      # 格式化输出
      indent_output: false
      # 忽略无法转换的对象
      fail_on_empty_beans: false
    deserialization:
      # 允许对象忽略json中不存在的属性
      fail_on_unknown_properties: false

# Sa-Token配置
sa-token:
  # token名称 (同时也是cookie名称)
  token-name: Authorization
  # token有效期 设为一天 (必定过期) 单位: 秒
  timeout: 86400
  # 多端不同 token 有效期 可查看 LoginHelper.loginByDevice 方法自定义
  # token最低活跃时间 (指定时间无操作就过期) 单位: 秒
  active-timeout: 43200
  # 允许动态设置 token 有效期
  dynamic-active-timeout: true
  # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
  is-concurrent: true
  # 在多人登录同一账号时，是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
  is-share: false
  # 是否尝试从header里读取token
  is-read-header: true
  # 是否尝试从cookie里读取token
  is-read-cookie: false
  # token前缀
  token-prefix: "Bearer"
  # jwt秘钥
  jwt-secret-key: abcdefghijklmnopqrstuvwxyz

# security配置
security:
  # 排除路径
  excludes:
    # 静态资源
    - /*.html
    - /**/*.html
    - /**/*.css
    - /**/*.js
    # 公共路径
    - /favicon.ico
    - /error
    # swagger 文档配置
    - /api-docs
    - /api-docs/**
    - /swagger-ui/**
    - /swagger-ui.html
    - /swagger-ui/index.html
    # actuator 监控配置
    - /actuator
    - /actuator/**
    # 积木报表配置
    - /jmreport/**
    - /drag/**
    - /jimubi/**

# MyBatisPlus配置
# https://baomidou.com/config/
mybatis-plus:
  # 不支持多包, 如有需要可在注解配置 或 提升扫包等级
  # 例如 com.**.**.mapper
  mapperPackage: com.maintain.**.mapper
  # 对应的 XML 文件位置
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 实体扫描，多个package用逗号或者分号分隔
  typeAliasesPackage: com.maintain.**.domain
  # 启动时是否检查 MyBatis XML 文件的存在，默认不检查
  checkConfigLocation: false
  configuration:
    # 自动驼峰命名规则（camel case）映射
    mapUnderscoreToCamelCase: true
    # MyBatis 自动映射策略
    # NONE：不启用 PARTIAL：只对非嵌套 resultMap 自动映射 FULL：对所有 resultMap 自动映射
    autoMappingBehavior: PARTIAL
    # MyBatis 自动映射时未知列或未知属性处理策
    # NONE：不做处理 WARNING：打印相关警告 FAILING：抛出异常和详细信息
    autoMappingUnknownColumnBehavior: NONE
    # 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
    # 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
    # 默认日志输出 org.apache.ibatis.logging.slf4j.Slf4jImpl
    logImpl: org.apache.ibatis.logging.nologging.NoLoggingImpl
  global-config:
    # 是否打印 Logo banner
    banner: true
    dbConfig:
      # 主键类型
      # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID
      idType: ASSIGN_ID
      # 逻辑已删除值
      logicDeleteValue: 2
      # 逻辑未删除值
      logicNotDeleteValue: 0
      # 字段验证策略之 insert,在 insert 的时候的字段验证策略
      # IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL
      insertStrategy: NOT_NULL
      # 字段验证策略之 update,在 update 的时候的字段验证策略
      updateStrategy: NOT_NULL
      # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
      where-strategy: NOT_NULL

# 数据加密
mybatis-encryptor:
  # 是否开启加密
  enable: false
  # 默认加密算法
  algorithm: BASE64
  # 编码方式 BASE64/HEX。默认BASE64
  encode: BASE64
  # 安全秘钥 对称算法的秘钥 如：AES，SM4
  password:
  # 公私钥 非对称算法的公私钥 如：SM2，RSA
  publicKey:
  privateKey:

springdoc:
  api-docs:
    path: /api-docs
    # 是否开启接口文档
    enabled: false
  swagger-ui:
    path: /swagger-ui.html
    # 持久化认证数据
    persistAuthorization: true
    enabled: false
  info:
    # 标题
    title: '标题：维修后台管理系统_接口文档'
    # 描述
    description: '描述：具体包括系统模块,业务模块等接口文档'
    # 版本
    version: '版本号: ${maintain-vue-plus.version}'
    # 作者信息
    contact:
      name: Shuai Liu
      email: ls1006@126.com
  components:
    # 鉴权方式配置
    security-schemes:
      apiKey:
        type: APIKEY
        in: HEADER
        name: ${sa-token.token-name}
  #这里定义了两个分组，可定义多个，也可以不定义
  group-configs:
    - group: 1.系统模块
      packages-to-scan: com.maintain.web
    - group: 2.业务模块
      packages-to-scan: com.maintain.business

# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接（多个用逗号分隔）
  excludes: /system/notice
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*,/business/*

# 全局线程池相关配置
thread-pool:
  # 是否开启线程池
  enabled: false
  # 队列最大长度
  queueCapacity: 128
  # 线程池维护线程所允许的空闲时间
  keepAliveSeconds: 300

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

--- # Actuator 监控端点的配置项
management:
  endpoints:
    enabled-by-default: false  # 默认关闭所有端点
    web:
      exposure:
        include: health,info   # 仅允许健康检查和基础信息端点
        exclude: env,jolokia,heapdump,shutdown,threaddump,sessions,trace,prometheus  # 显式排除高危端点
      base-path: /internal-monitor  # 自定义访问路径（避免默认/actuator）
    jmx:
      exposure:
        exclude: '*'            # 禁用所有JMX端点（除非必要）

  endpoint:
    health:
      enabled: true             # 开放健康检查（无敏感信息）
      show-details: never       # 禁止显示详情（或改为`when-authorized`）
#      health:
#        show-details: ALWAYS
      logfile:
        external-file: ./logs/sys-console.log
    info:
      enabled: true             # 开放基础信息端点
    env:
      enabled: false            # 禁用环境变量端点
      keys-to-sanitize: password,secret,key,token  # 脱敏字段（即使意外开启）
    jolokia:
      enabled: false            # 禁用Jolokia（防RCE漏洞）
    heapdump:
      enabled: false            # 禁用堆转储
    shutdown:
      enabled: false            # 禁用远程关闭
    configprops:
      keys-to-sanitize: password,secret  # 配置属性脱敏

spring:
  datasource:
    hikari:
      #设置数据库超时时间
      connection-timeout: 100000
      #池中维护的最小连接数
      minimum-idle: 5
      #池中最大连接数
      maximum-pool-size: 15
      #连接最长闲置时间
      idle-timeout: 30000
      #池中连接最长生命周期
      max-lifetime: 30000
jeecg:
  jmreport:
    #多租户模式，默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
    saasMode: createDeptId
    # 平台上线安全配置(v1.6.2+ 新增)
    firewall:
      # 数据源安全 (开启后，不允许使用平台数据源、SQL解析不允许select * 查询、禁止测试数据源连接是否正确)
      # 数据源安全下，预留角色有权限使用 select * 和测试数据源链接
      dataSourceSafe: true
      # 低代码开发模式（dev:开发模式，prod:发布模式关闭报表设计，预留角色admin、lowdeveloper可设计, prodsf:发布安全模式 彻底关闭报表设计）
      lowCodeMode: dev
      # api数据集内网ip白名单，在发布模式下只只能向设置了白名单的内网服务器发送请求。
      apiDsIpWhite:
      # sql注入检查级别（strict:严格, basic:简单校验, none:不校验）
      sqlInjectionLevel: strict
