# ═══════════════════════════════════════════════════════════ # 深学在线 · 主配置 # 环境差异全部放 application-{dev,test,prod}.yml # ⚠️ 生产密钥一律走环境变量,不写在这里 # ═══════════════════════════════════════════════════════════ server: port: 8080 # 上传接口是长连接,超时要放宽(学生可能从聊天记录选一个 40MB 的文件) tomcat: connection-timeout: 60s max-swallow-size: 100MB compression: enabled: true mime-types: application/json,text/html,text/css,application/javascript min-response-size: 2048 spring: application: name: xt-server profiles: active: dev # 额外挂一个 local 配置(backend/application-local.yml,**不提交**)。 # 用它放云存储密钥这类不该进仓库的东西;文件不存在时是空操作,不影响任何环境。 # # ⚠️ 为什么不用 spring.config.import —— 试过,**优先级不够**: # 导入的文件排在 profile 文件之后(优先级更低),于是 # application-dev.yml 里的 provider 会把它盖掉,表现是 # "文件明明配了 qiniu,启动后却还是本地磁盘",而且不会有任何报错。 # profile 文件是后加载的,优先级更高,行为符合直觉。 include: local lifecycle: # 优雅停机:等在途请求处理完,避免上传/导出被打断 timeout-per-shutdown-phase: 30s jackson: time-zone: Asia/Shanghai default-property-inclusion: always deserialization: fail-on-unknown-properties: false servlet: multipart: max-file-size: 50MB max-request-size: 60MB datasource: driver-class-name: org.postgresql.Driver hikari: pool-name: xt-hikari minimum-idle: 5 maximum-pool-size: 20 connection-timeout: 10000 idle-timeout: 600000 max-lifetime: 1700000 # 慢 SQL 从应用侧也记一份,方便和 PG 的 log_min_duration_statement 对照 leak-detection-threshold: 20000 data: redis: timeout: 3s lettuce: pool: max-active: 16 max-idle: 8 min-idle: 2 max-wait: 3s flyway: enabled: true locations: classpath:db/migration # 迁移文件一旦发布就不许改,改了校验会失败——这是保护,不是障碍 validate-on-migrate: true baseline-on-migrate: false table: flyway_schema_history mybatis-plus: configuration: map-underscore-to-camel-case: true # 生产环境关掉 SQL 日志,dev 单独开 log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl global-config: banner: false db-config: # 软删除字段名,客户明确要求就叫 deleted logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 id-type: auto management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: when-authorized health: redis: enabled: true springdoc: api-docs: path: /v3/api-docs swagger-ui: path: /doc.html tags-sorter: alpha operations-sorter: alpha # ── 本项目业务配置 ──────────────────────────── fill: # JWT 见《03-接口设计》§1.2:PC 8 小时 / 小程序 7 天 jwt: issuer: tianbaotong-fill pc-expire-seconds: 28800 mp-expire-seconds: 604800 # 密钥与 RSA/AES 密钥在 application-{env}.yml 或环境变量中提供 security: # 登录失败锁定:5 次锁 15 分钟(§1.6) login-max-fail: 5 login-lock-minutes: 15 # 连续失败几次后要求图形验证码 captcha-after-fails: 2 upload: # 单文件上限 50MB(PRD §10.1) max-file-size-mb: 50