Files
InfoGenie/infogenie-backend-java/后端文档.md
2026-04-03 21:18:29 +08:00

7.3 KiB
Raw Permalink Blame History

万象口袋 — JavaSpring Boot后端文档

技术栈Java 17 · Spring Boot 3.5 · Spring Web · Spring Data JPA · Hibernate · MySQL · Spring Data RedisLettuce

模块路径Maven 工程 infogenie-backend-java(坐标 com.smyhub.infogenie:infogenie-backend-java

入口com.smyhub.infogenie.infogeniebackendjava.InfogenieBackendJavaApplication — 载入 application.yaml、连接 MySQL、按需使用 Redis、启动内嵌 Tomcat。

与 Go 后端关系:路由与 JSON 契约与 infogenie-backend-go 对齐,便于前端同一份 REACT_APP_API_URL 切换端口联调;生产环境当前以 Go 部署为主时,可将前端仍指向 Go 服务。


运行与配置

  • 配置主文件:src/main/resources/application.yaml(占位符 ${VAR:default} 可被系统环境变量或 IDE Run Configuration 覆盖)。
  • Spring Boot 不会自动读取 仓库内 .env.development;该文件仅作文向 application.yaml 变量说明(也可自行在 IDE 中一条条导入为环境变量)。
  • **APP_PORT**:默认 5002(与 Go 开发端口一致时需注意二选一占用;亦可改为 5003 等与 Go 错峰)。
  • 数据库:通过 DB_HOSTDB_PORTDB_NAMEDB_USERDB_PASSWORD 注入 JDBC URLyaml 内已给开发用默认值,与 Go .env.development 常见配置一致)。
  • 认证中心:AUTH_CENTER_API_URLapp.auth-center-url
  • 站点管理:INFOGENIE_SITE_ADMIN_TOKENapp.site-admin-token(请求头 X-Site-Admin-Token)。

Redis可选

业务是否走缓存由 app.redis-enabled(环境变量 REDIS_ENABLED)决定;关闭时服务逻辑直连 MySQL不在启动阶段强制 Ping Redis。

变量 说明
REDIS_ENABLED true / false;映射 app.redis-enabled
REDIS_HOST / REDIS_PORT spring.data.redis.host / port
REDIS_PASSWORD 可选
REDIS_DB 逻辑库编号,默认与 yaml 中示例一致
REDIS_KEY_PREFIX app.redis-key-prefix,建议与 Go 前缀区分(如 infogenie:java:
REDIS_SITE_TTL 站点类缓存 TTLapp.redis-site-ttl

站点只读接口对 60s-disabled60s-sourceai-model-disabledfeature-clicks:{section} 等做 cache-aside管理端写入后删除对应 KeySiteConfigServiceFeatureClickService)。

邮件(诊断展示)

管理页 diagnostics 中的 mail 块来自环境变量 MAIL_HOSTMAIL_PORTMAIL_USERNAMEMAIL_PASSWORD(仅展示是否配置密码,不落明文)。


健康与诊断

GET /api/health(公开)

响应形状与 Go 一致,供 AdminPage.jsnormalizeHealthPayload 解析:

  • statusrunningdegradedMySQL 未连通或 60s 上游探测失败;因 Redis 将整体标为 degraded与 Go 一致)。
  • databaseconnected / disconnected
  • mysql{ ok, status }
  • redis:未启用 { enabled: false };启用 { enabled: true, ok, error? }
  • backend_api{ ok: true }
  • sixty_apioksource_idbase_urllabelprobe_urlhttp_statuslatency_mserror

HTTP 状态:始终 200(退化只体现在 JSON status),避免前端将健康拉取判为失败。

GET /api/admin/site/diagnostics(需管理员)

请求头 X-Site-Admin-TokenINFOGENIE_SITE_ADMIN_TOKEN 一致。返回字段与 Go 对齐:appenvlisten_addrlisten_port)、mysqlredissixty_upstreamauth_center.api_urlmail 等(不含密钥明文)。


根路径GET / — 服务说明与主要 endpoint 列表(version3.3.0-java)。


数据库JPA

spring.jpa.hibernate.ddl-auto: update 启动时按实体同步表结构,与 Go AutoMigrate 使用同一组业务表:

实体 用途
AIConfig 多厂商 AI Key / Base / 模型
Site60sDisabled 60s 前台隐藏 feature_id
SiteAIRuntime DeepSeek 兼容网关Base + Key + 默认模型),优先级高于部分 AIConfig
Site60sUpstream 60s 上游(单例 id=1
SiteAIModelDisabled AI 应用前台隐藏 app_id
SiteFeatureCardClick 功能卡片点击(section + item_id 联合主键);增量 SQL 为 MySQL INSERT … ON DUPLICATE KEY UPDATE,对应 Repository 使用 nativeQuery = true

路由与包结构概览

包根:com.smyhub.infogenie.infogeniebackendjava

说明
config WebConfigCORSRedisConfigRestTemplateConfigAppProperties
controller HealthAuthUserSiteConfigAdminAIModel
service 站点配置、点击统计、AI 调用、AI 工具提示词、运行时配置、健康探测
repository Spring Data JPA
entity JPA 实体
dto.request / dto.response 入参与出参;管理端、item_id 等入参使用 snake_case@JsonProperty与前端、Go 一致
filter JwtAuthFilter:将 Authorization: Bearer 转发认证中心 POST …/api/auth/verify,结果放入 request attribute
util 管理员令牌校验、AI 辅助方法

CORS

WebConfig 放宽常用 Method/HeaderAuthorizationX-Site-Admin-Token)。

认证与用户

方法 路径 说明
GET /api/auth/check 可选 Bearer已登录则返回简要 user
GET /api/user/profile 有效 Bearer

站点公开配置

方法 路径 说明
GET /api/site/60s-disabled 隐藏 60s id 列表
GET /api/site/60s-source 当前 60s 节点
GET /api/site/ai-model-disabled 隐藏 AI 应用 id
GET /api/site/feature-card-clicks?section= 点击统计
POST /api/site/feature-card-clicks/increment bodysectionitem_id

站点管理(X-Site-Admin-Token

方法 路径 说明
PUT /api/admin/site/60s-disabled bodydisabled
PUT /api/admin/site/60s-source bodysource_id
PUT /api/admin/site/ai-model-disabled bodydisabled
GET/PUT /api/admin/site/ai-runtime GET 脱敏PUT bodyapi_baseapi_keydefault_modeldefault_provider
GET /api/admin/site/diagnostics 配置快照

AI/api/aimodelapp,需 Bearer

方法 路径 说明
POST /chat/chat/stream 非流式 / SSE 透传
POST /name-analysis 垂直场景
GET /models 白名单模型列表

上游解析与 Go 一致:SiteAIRuntime 在 base+key 齐全时优先;否则读 AIConfigdeepseek/kimi


常用命令

cd infogenie-backend-java
./mvnw test
./mvnw spring-boot:run

与其他工程的关系

  • 前端 SPA 通过 REACT_APP_API_URL 指向本服务或 Go 服务(路径相同,端口按实际进程调整)。
  • 更完整的前端对接说明见 infogenie-frontend/前端文档.mdGo 行为对照见 infogenie-backend-go/后端文档.md