Ver Fonte

fix: 将公共配置文件引用标记为可选

修复启动时因缺少 application-common.properties 和
application-infra.properties 导致的启动失败问题
何文松 há 1 mês atrás
pai
commit
859516645e

+ 7 - 0
.comments/进度报告.png.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<comment version="3.0">
+  <caption/>
+  <note/>
+  <place/>
+  <categories/>
+</comment>

+ 320 - 0
.cursor/plans/rag向量化存储实现_a8bc800e.plan.md

@@ -0,0 +1,320 @@
+---
+name: RAG向量化存储实现
+overview: 基于 pgvector + Ollama(bge-large-zh-v1.5) + DeepSeek API 实现 RAG 系统,包含文本分块、向量化、向量存储、相似度检索和问答生成功能。
+todos:
+  - id: sql-schema
+    content: 创建 RAG 相关数据表 SQL(text_chunks, vector_embeddings)
+    status: completed
+  - id: entities
+    content: 实现 TextChunk 和 VectorEmbedding 实体类
+    status: completed
+  - id: repositories
+    content: 实现 Repository 层(含向量检索原生 SQL)
+    status: completed
+  - id: chunk-service
+    content: 实现文本分块服务 TextChunkService
+    status: completed
+  - id: ollama-service
+    content: 实现 Ollama Embedding 服务 OllamaEmbeddingService
+    status: completed
+  - id: vector-search
+    content: 实现向量检索服务 VectorSearchService
+    status: completed
+  - id: deepseek-client
+    content: 实现 DeepSeek API 客户端
+    status: completed
+  - id: rag-service
+    content: 实现 RAG 核心服务
+    status: completed
+  - id: rag-controller
+    content: 实现 RAG API Controller
+    status: completed
+  - id: config
+    content: 添加配置项和配置类
+    status: completed
+  - id: integration
+    content: 集成到现有 TextStorageService 和 ParseService
+    status: completed
+---
+
+# RAG 向量化存储实现计划
+
+## 技术架构
+
+```mermaid
+flowchart LR
+    subgraph input [文档输入]
+        A[上传文档] --> B[文本提取]
+    end
+    
+    subgraph vectorization [向量化处理]
+        B --> C[文本分块]
+        C --> D[Ollama Embedding]
+        D --> E[pgvector存储]
+    end
+    
+    subgraph query [RAG查询]
+        F[用户问题] --> G[问题向量化]
+        G --> H[向量检索]
+        H --> I[上下文构建]
+        I --> J[DeepSeek生成]
+        J --> K[返回答案]
+    end
+    
+    E --> H
+```
+
+## 一、数据库层
+
+### 1.1 启用 pgvector 扩展
+
+在 [backend/sql/init.sql](backend/sql/init.sql) 中添加 pgvector 扩展和新表。
+
+**新增 SQL**:
+
+```sql
+-- 启用向量扩展
+CREATE EXTENSION IF NOT EXISTS vector;
+
+-- 文本分块表
+CREATE TABLE text_chunks (
+    id VARCHAR(32) PRIMARY KEY,
+    document_id VARCHAR(32) NOT NULL,
+    text_storage_id VARCHAR(32),
+    chunk_index INTEGER NOT NULL,
+    content TEXT NOT NULL,
+    token_count INTEGER,
+    metadata JSONB,
+    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- 向量嵌入表
+CREATE TABLE vector_embeddings (
+    id VARCHAR(32) PRIMARY KEY,
+    chunk_id VARCHAR(32) NOT NULL REFERENCES text_chunks(id) ON DELETE CASCADE,
+    embedding vector(1024),  -- bge-large-zh-v1.5 维度
+    model_name VARCHAR(100) DEFAULT 'bge-large-zh-v1.5',
+    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+);
+
+-- HNSW 向量索引
+CREATE INDEX idx_vector_embeddings_hnsw ON vector_embeddings 
+    USING hnsw (embedding vector_cosine_ops);
+```
+
+## 二、实体层 (graph-service)
+
+### 2.1 TextChunk 实体
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/entity/TextChunk.java`
+
+```java
+@Data
+@TableName(value = "text_chunks", autoResultMap = true)
+public class TextChunk extends SimpleModel {
+    private String documentId;
+    private String textStorageId;
+    private Integer chunkIndex;
+    private String content;
+    private Integer tokenCount;
+    private Map<String, Object> metadata;
+}
+```
+
+### 2.2 VectorEmbedding 实体
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/entity/VectorEmbedding.java`
+
+```java
+@Data
+@TableName("vector_embeddings")
+public class VectorEmbedding extends SimpleModel {
+    private String chunkId;
+    private String embedding;  // pgvector 格式字符串
+    private String modelName;
+}
+```
+
+## 三、Repository 层
+
+### 3.1 TextChunkRepository
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/repository/TextChunkRepository.java`
+
+### 3.2 VectorEmbeddingRepository
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/repository/VectorEmbeddingRepository.java`
+
+- 需自定义原生 SQL 查询实现向量相似度检索
+
+## 四、Service 层
+
+### 4.1 文本分块服务
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/service/TextChunkService.java`
+
+核心功能:
+
+- `chunkText(documentId, textStorageId, text)` - 文本分块
+- 分块策略: 500字符/块,50字符重叠
+- 智能句子边界切分(句号、问号等)
+- 自动计算 token 数量
+
+### 4.2 Ollama Embedding 服务
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/service/OllamaEmbeddingService.java`
+
+核心功能:
+
+- `embed(text)` - 单文本向量化
+- `embedBatch(texts)` - 批量向量化
+- 调用 Ollama API: `POST http://localhost:11434/api/embeddings`
+- 模型: `bge-large-zh-v1.5` 或 `nomic-embed-text`
+
+### 4.3 向量检索服务
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/service/VectorSearchService.java`
+
+核心功能:
+
+- `search(query, topK, documentId)` - 向量相似度检索
+- 使用 pgvector 的 `<=>` 余弦距离操作符
+- 支持按文档 ID 筛选
+
+### 4.4 RAG 服务
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/service/RAGService.java`
+
+核心功能:
+
+- `query(question, documentId, topK)` - RAG 问答
+- 上下文构建(拼接相关文本块)
+- Prompt 模板管理
+
+## 五、AI 服务层 (ai-service)
+
+### 5.1 DeepSeek 客户端
+
+**新建文件**: `backend/ai-service/src/main/java/com/lingyue/ai/client/DeepSeekClient.java`
+
+核心功能:
+
+- `complete(prompt)` - 文本生成
+- `chat(messages)` - 对话生成
+- API 配置: URL、API Key、模型选择
+
+### 5.2 DeepSeek DTO
+
+**新建文件**:
+
+- `backend/ai-service/src/main/java/com/lingyue/ai/dto/ChatRequest.java`
+- `backend/ai-service/src/main/java/com/lingyue/ai/dto/ChatResponse.java`
+
+## 六、配置层
+
+### 6.1 配置类
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/config/VectorConfig.java`
+
+配置 Ollama WebClient Bean。
+
+### 6.2 配置项
+
+在 [backend/lingyue-starter/src/main/resources/application.properties](backend/lingyue-starter/src/main/resources/application.properties) 中添加:
+
+```properties
+# Ollama Embedding 配置
+ollama.url=http://localhost:11434
+ollama.embedding.model=nomic-embed-text
+
+# DeepSeek API 配置
+deepseek.api.url=https://api.deepseek.com
+deepseek.api.key=${DEEPSEEK_API_KEY:}
+deepseek.api.model=deepseek-chat
+
+# RAG 配置
+rag.chunk.size=500
+rag.chunk.overlap=50
+rag.search.top-k=3
+```
+
+## 七、Controller 层
+
+### 7.1 RAG Controller
+
+**新建文件**: `backend/graph-service/src/main/java/com/lingyue/graph/controller/RAGController.java`
+
+API 接口:
+
+- `POST /api/rag/index` - 索引文档(分块+向量化)
+- `POST /api/rag/query` - RAG 问答
+- `GET /api/rag/chunks/{documentId}` - 获取文档分块
+- `DELETE /api/rag/index/{documentId}` - 删除文档索引
+
+## 八、与现有代码集成
+
+### 8.1 扩展 TextStorageService
+
+修改 [backend/graph-service/src/main/java/com/lingyue/graph/service/TextStorageService.java](backend/graph-service/src/main/java/com/lingyue/graph/service/TextStorageService.java)
+
+- 保存文本后自动触发分块和向量化
+- 新增方法: `saveAndIndex(documentId, filePath)`
+
+### 8.2 扩展 ParseService
+
+修改 [backend/parse-service/src/main/java/com/lingyue/parse/service/ParseService.java](backend/parse-service/src/main/java/com/lingyue/parse/service/ParseService.java)
+
+- 解析完成后自动调用 RAG 索引
+
+## 九、Ollama 部署
+
+### 9.1 安装 Ollama
+
+```bash
+curl -fsSL https://ollama.com/install.sh | sh
+```
+
+### 9.2 拉取 Embedding 模型
+
+```bash
+# 推荐使用 nomic-embed-text(Ollama 原生支持)
+ollama pull nomic-embed-text
+
+# 或使用 bge 系列(需确认 Ollama 支持)
+ollama pull bge-large
+```
+
+## 十、文件清单
+
+| 类型 | 文件路径 | 说明 |
+
+|-----|---------|------|
+
+| SQL | `backend/sql/rag_tables.sql` | RAG 相关表 |
+
+| Entity | `graph-service/.../entity/TextChunk.java` | 文本分块实体 |
+
+| Entity | `graph-service/.../entity/VectorEmbedding.java` | 向量嵌入实体 |
+
+| Repository | `graph-service/.../repository/TextChunkRepository.java` | 分块数据访问 |
+
+| Repository | `graph-service/.../repository/VectorEmbeddingRepository.java` | 向量数据访问 |
+
+| Service | `graph-service/.../service/TextChunkService.java` | 文本分块服务 |
+
+| Service | `graph-service/.../service/OllamaEmbeddingService.java` | Ollama 向量化 |
+
+| Service | `graph-service/.../service/VectorSearchService.java` | 向量检索 |
+
+| Service | `graph-service/.../service/RAGService.java` | RAG 核心服务 |
+
+| Config | `graph-service/.../config/VectorConfig.java` | 向量配置 |
+
+| Client | `ai-service/.../client/DeepSeekClient.java` | DeepSeek 客户端 |
+
+| DTO | `ai-service/.../dto/ChatRequest.java` | 请求 DTO |
+
+| DTO | `ai-service/.../dto/ChatResponse.java` | 响应 DTO |
+
+| Controller | `graph-service/.../controller/RAGController.java` | RAG API |

+ 44 - 0
.cursor/rules/rules.mdc

@@ -0,0 +1,44 @@
+---
+alwaysApply: true
+---
+
+## 需要告知
+
+每次告诉我本次chat使用的模型
+
+## 代码设计
+
+设计逻辑参考 `a_docs/灵越智报2.0程序设计详解.md`
+
+## 代码规范
+
+1.  **项目结构规范**
+    *   统一父POM管理依赖版本,子模块按业务或功能划分。
+    *   模块命名清晰,遵循`服务名-功能`格式(如`user-service`, `gateway-module`)。
+
+2.  **接口定义与契约**
+    *   内部服务间HTTP API优先使用OpenAPI 3.0(SpringDoc)定义,并明确版本。
+    *   Feign Client接口需声明在独立模块,供消费者依赖;方法名与路径遵循RESTful风格。
+
+3.  **配置管理**
+    *   敏感配置必须加密,环境相关配置与代码分离。
+
+4.  **服务治理与容错**
+    *   服务注册发现:使用Spring Cloud原生客户端(如Nacos Discovery),确保实例元数据规范。
+    *   熔断降级:统一使用Resilience4j,定义合理的熔断策略和降级逻辑。
+    *   链路追踪:全服务集成Sleuth,日志中必须包含TraceID。
+
+5.  **日志与监控**
+    *   日志格式统一为JSON,包含时间、级别、服务名、TraceID等关键字段。
+    *   核心接口需通过Micrometer暴露指标,并与监控系统集成。
+
+6.  **安全与部署**
+    *   配置文件禁止提交敏感信息(如密码、密钥)。
+    *   容器化部署时,健康检查接口(`/actuator/health`)必须启用。
+
+7.  **版本约束**
+    *   统一Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本映射,避免兼容性问题。
+
+## 代码检查
+
+chat进行新代码修改或新增,结束后检查整体逻辑

+ 24 - 0
.env.example

@@ -0,0 +1,24 @@
+# 数据库配置
+DB_USERNAME=postgres
+DB_PASSWORD=postgres123
+
+# Redis 配置
+REDIS_HOST=redis
+REDIS_PORT=6379
+REDIS_PASSWORD=
+
+# RabbitMQ 配置
+RABBITMQ_HOST=rabbitmq
+RABBITMQ_PORT=5672
+RABBITMQ_USERNAME=admin
+RABBITMQ_PASSWORD=admin123
+
+# JWT 密钥(生产环境请务必修改!)
+JWT_SECRET=lingyue-zhibao-production-secret-key-please-change-this
+
+# PaddleOCR 配置
+PADDLEOCR_SERVER_URL=http://paddleocr:8866
+
+# DeepSeek API 配置(需要申请 API Key)
+DEEPSEEK_API_KEY=your-deepseek-api-key-here
+DEEPSEEK_API_URL=https://api.deepseek.com

+ 441 - 0
README_DEPLOY.md

@@ -0,0 +1,441 @@
+# 灵越智报 2.0 部署指南
+
+## 目录
+
+- [环境要求](#环境要求)
+- [快速开始](#快速开始)
+- [Docker 部署(推荐)](#docker-部署推荐)
+- [传统部署](#传统部署)
+- [配置说明](#配置说明)
+- [常见问题](#常见问题)
+
+## 环境要求
+
+### 基础环境
+- **操作系统**: Linux / macOS / Windows
+- **Java**: JDK 17 或更高版本
+- **Maven**: 3.8.0 或更高版本
+
+### 运行环境(如果使用 Docker 则自动提供)
+- **PostgreSQL**: 16.0 或更高版本
+- **Redis**: 7.0 或更高版本
+- **RabbitMQ**: 3.13 或更高版本(可选)
+
+### Docker 环境(推荐)
+- **Docker**: 20.10 或更高版本
+- **Docker Compose**: 2.0 或更高版本
+
+## 快速开始
+
+### 方式一: 使用部署脚本(最简单)
+
+```bash
+# 1. 进入项目根目录
+cd lingyue-zhibao
+
+# 2. 赋予执行权限
+chmod +x deploy.sh
+
+# 3. 启动服务(不包含 OCR)
+./deploy.sh start
+
+# 或者启动完整服务(包含 PaddleOCR)
+./deploy.sh start-with-ocr
+```
+
+### 方式二: 手动 Docker 部署
+
+```bash
+# 1. 编译项目
+cd backend
+mvn clean package -DskipTests
+cd ..
+
+# 2. 复制环境变量配置
+cp .env.example .env
+
+# 3. 修改 .env 文件中的配置(特别是 JWT_SECRET 和 API 密钥)
+vim .env
+
+# 4. 启动服务
+docker-compose up -d
+
+# 5. 查看日志
+docker-compose logs -f lingyue-app
+```
+
+## Docker 部署(推荐)
+
+### 1. 准备工作
+
+```bash
+# 克隆或进入项目目录
+cd lingyue-zhibao
+
+# 复制环境配置文件
+cp .env.example .env
+```
+
+### 2. 修改配置
+
+编辑 `.env` 文件,修改以下重要配置:
+
+```env
+# 数据库密码(生产环境务必修改!)
+DB_PASSWORD=your-strong-password
+
+# JWT 密钥(生产环境务必修改!)
+JWT_SECRET=your-very-long-random-secret-key
+
+# DeepSeek API Key(如需 AI 功能)
+DEEPSEEK_API_KEY=your-deepseek-api-key
+```
+
+### 3. 启动服务
+
+```bash
+# 完整启动(包含所有服务)
+docker-compose --profile with-ocr up -d
+
+# 或者不启动 OCR 服务
+docker-compose up -d
+```
+
+### 4. 验证部署
+
+```bash
+# 查看服务状态
+docker-compose ps
+
+# 查看应用日志
+docker-compose logs -f lingyue-app
+
+# 健康检查
+curl http://localhost:8000/actuator/health
+```
+
+### 5. 访问应用
+
+- **应用主页**: http://localhost:8000
+- **API 文档**: http://localhost:8000/swagger-ui.html
+- **Druid 监控**: http://localhost:8000/druid/ (admin/admin123)
+- **RabbitMQ 管理**: http://localhost:15672 (admin/admin123)
+
+## 传统部署
+
+### 1. 环境准备
+
+#### 安装 PostgreSQL
+
+```bash
+# Ubuntu/Debian
+sudo apt update
+sudo apt install postgresql-16
+
+# 创建数据库
+sudo -u postgres psql
+CREATE DATABASE lingyue_zhibao;
+CREATE USER lingyue WITH PASSWORD '123123';
+GRANT ALL PRIVILEGES ON DATABASE lingyue_zhibao TO lingyue;
+```
+
+#### 安装 Redis
+
+```bash
+# Ubuntu/Debian
+sudo apt install redis-server
+
+# 启动 Redis
+sudo systemctl start redis-server
+sudo systemctl enable redis-server
+```
+
+#### 安装 RabbitMQ(可选)
+
+```bash
+# Ubuntu/Debian
+sudo apt install rabbitmq-server
+
+# 启动 RabbitMQ
+sudo systemctl start rabbitmq-server
+sudo systemctl enable rabbitmq-server
+
+# 启用管理插件
+sudo rabbitmq-plugins enable rabbitmq_management
+
+# 创建用户
+sudo rabbitmqctl add_user admin admin123
+sudo rabbitmqctl set_user_tags admin administrator
+sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
+```
+
+### 2. 编译项目
+
+```bash
+cd backend
+mvn clean package -DskipTests
+```
+
+### 3. 配置应用
+
+编辑 `backend/lingyue-starter/src/main/resources/application.properties`:
+
+```properties
+# 数据库配置
+spring.datasource.druid.url=jdbc:postgresql://localhost:5432/lingyue_zhibao
+spring.datasource.druid.username=lingyue
+spring.datasource.druid.password=123123
+
+# Redis配置
+spring.data.redis.host=localhost
+spring.data.redis.port=6379
+
+# RabbitMQ配置
+spring.rabbitmq.host=localhost
+spring.rabbitmq.port=5672
+spring.rabbitmq.username=admin
+spring.rabbitmq.password=admin123
+
+# JWT配置
+jwt.secret=your-jwt-secret-key
+```
+
+或者通过环境变量配置(推荐用于生产环境):
+
+```bash
+export DB_USERNAME=lingyue
+export DB_PASSWORD=123123
+export JWT_SECRET=your-very-long-random-secret-key
+```
+
+### 4. 运行应用
+
+```bash
+# 方式一: 使用 java -jar
+cd backend/lingyue-starter/target
+java -jar lingyue-starter.jar
+
+# 方式二: 使用 Maven
+cd backend
+mvn spring-boot:run -pl lingyue-starter
+
+# 方式三: 后台运行
+nohup java -jar lingyue-starter.jar > app.log 2>&1 &
+```
+
+### 5. 使用 systemd 管理服务
+
+创建服务文件 `/etc/systemd/system/lingyue-zhibao.service`:
+
+```ini
+[Unit]
+Description=Lingyue Zhibao Application
+After=network.target postgresql.service redis.service
+
+[Service]
+Type=simple
+User=lingyue
+WorkingDirectory=/opt/lingyue-zhibao
+ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/lingyue-zhibao/lingyue-starter.jar
+Restart=on-failure
+RestartSec=10
+
+[Install]
+WantedBy=multi-user.target
+```
+
+启动服务:
+
+```bash
+sudo systemctl daemon-reload
+sudo systemctl start lingyue-zhibao
+sudo systemctl enable lingyue-zhibao
+sudo systemctl status lingyue-zhibao
+```
+
+## 配置说明
+
+### 环境变量
+
+| 变量名 | 说明 | 默认值 |
+|--------|------|--------|
+| DB_USERNAME | 数据库用户名 | postgres |
+| DB_PASSWORD | 数据库密码 | postgres |
+| REDIS_HOST | Redis 主机 | localhost |
+| REDIS_PORT | Redis 端口 | 6379 |
+| REDIS_PASSWORD | Redis 密码 | (空) |
+| RABBITMQ_HOST | RabbitMQ 主机 | localhost |
+| RABBITMQ_PORT | RabbitMQ 端口 | 5672 |
+| RABBITMQ_USERNAME | RabbitMQ 用户名 | guest |
+| RABBITMQ_PASSWORD | RabbitMQ 密码 | guest |
+| JWT_SECRET | JWT 密钥 | (需修改) |
+| PADDLEOCR_SERVER_URL | PaddleOCR 服务地址 | http://localhost:8866 |
+| DEEPSEEK_API_KEY | DeepSeek API 密钥 | (需配置) |
+
+### 端口说明
+
+| 服务 | 端口 | 说明 |
+|------|------|------|
+| 应用主服务 | 8000 | 主应用端口 |
+| PostgreSQL | 5432 | 数据库端口 |
+| Redis | 6379 | 缓存服务端口 |
+| RabbitMQ | 5672 | 消息队列端口 |
+| RabbitMQ 管理 | 15672 | RabbitMQ 管理界面 |
+| PaddleOCR | 8866 | OCR 服务端口 |
+
+## 常见问题
+
+### 1. 数据库连接失败
+
+**问题**: 应用启动时提示数据库连接失败
+
+**解决方案**:
+```bash
+# 检查 PostgreSQL 是否运行
+docker-compose ps postgres
+# 或
+sudo systemctl status postgresql
+
+# 检查数据库配置
+docker-compose exec postgres psql -U postgres -c "SELECT 1"
+
+# 查看详细日志
+docker-compose logs postgres
+```
+
+### 2. Redis 连接失败
+
+**问题**: Redis 连接超时或拒绝连接
+
+**解决方案**:
+```bash
+# 检查 Redis 是否运行
+docker-compose ps redis
+# 或
+sudo systemctl status redis
+
+# 测试 Redis 连接
+redis-cli ping
+```
+
+### 3. 端口被占用
+
+**问题**: 服务启动失败,提示端口已被占用
+
+**解决方案**:
+```bash
+# 查看占用端口的进程
+sudo lsof -i :8000
+sudo netstat -tulpn | grep 8000
+
+# 修改 docker-compose.yml 中的端口映射
+# 例如将 8000:8000 改为 8080:8000
+```
+
+### 4. 内存不足
+
+**问题**: 应用运行缓慢或频繁重启
+
+**解决方案**:
+
+修改 `Dockerfile` 中的 JVM 参数:
+```dockerfile
+ENV JAVA_OPTS="-Xms1024m -Xmx2048m -XX:+UseG1GC"
+```
+
+或在启动时指定:
+```bash
+docker-compose up -d --build
+```
+
+### 5. 查看应用日志
+
+```bash
+# Docker 部署
+docker-compose logs -f lingyue-app
+
+# 传统部署
+tail -f /opt/lingyue-zhibao/logs/lingyue.log
+
+# systemd 服务
+sudo journalctl -u lingyue-zhibao -f
+```
+
+### 6. 重置数据库
+
+```bash
+# Docker 环境
+docker-compose down -v  # 删除所有卷
+docker-compose up -d
+
+# 传统部署
+sudo -u postgres psql
+DROP DATABASE lingyue_zhibao;
+CREATE DATABASE lingyue_zhibao;
+```
+
+## 性能优化建议
+
+### 1. JVM 调优
+
+```bash
+# 生产环境建议
+JAVA_OPTS="-Xms2g -Xmx4g \
+  -XX:+UseG1GC \
+  -XX:MaxGCPauseMillis=200 \
+  -XX:+HeapDumpOnOutOfMemoryError \
+  -XX:HeapDumpPath=/app/logs"
+```
+
+### 2. 数据库优化
+
+```sql
+-- 增加连接池大小
+ALTER SYSTEM SET max_connections = 200;
+
+-- 优化缓存
+ALTER SYSTEM SET shared_buffers = '256MB';
+ALTER SYSTEM SET effective_cache_size = '1GB';
+```
+
+### 3. Redis 优化
+
+```bash
+# 增加最大内存
+redis-cli CONFIG SET maxmemory 2gb
+redis-cli CONFIG SET maxmemory-policy allkeys-lru
+```
+
+## 安全建议
+
+1. **修改默认密码**: 生产环境务必修改所有默认密码
+2. **配置防火墙**: 只开放必要的端口
+3. **启用 HTTPS**: 使用 Nginx 反向代理配置 SSL
+4. **定期备份**: 配置数据库自动备份
+5. **监控告警**: 配置应用和基础设施监控
+
+## 备份与恢复
+
+### 数据库备份
+
+```bash
+# 备份
+docker-compose exec postgres pg_dump -U postgres lingyue_zhibao > backup.sql
+
+# 恢复
+docker-compose exec -T postgres psql -U postgres lingyue_zhibao < backup.sql
+```
+
+### 文件备份
+
+```bash
+# 备份上传文件
+docker run --rm -v lingyue_app_data:/data -v $(pwd):/backup ubuntu tar czf /backup/app_data_backup.tar.gz /data
+```
+
+## 技术支持
+
+如有问题,请联系:
+- 邮箱: support@lingyue.com
+- 文档: https://docs.lingyue.com
+- Issues: https://github.com/lingyue/lingyue-zhibao/issues

+ 2 - 2
backend/ai-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # AI Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8004

+ 2 - 2
backend/auth-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Auth Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8001

+ 2 - 2
backend/document-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Document Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8002

+ 2 - 2
backend/graph-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Graph Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8005

+ 2 - 2
backend/lingyue-starter/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Lingyue Starter - 单体应用统一配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选,避免文件不存在时启动失败)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8000

+ 2 - 2
backend/notification-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Notification Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8006

+ 2 - 2
backend/parse-service/src/main/resources/application.properties

@@ -2,8 +2,8 @@
 # Parse Service 配置
 # ============================================
 
-# 引入公共配置
-spring.config.import=classpath:application-common.properties,classpath:application-infra.properties
+# 引入公共配置(标记为可选)
+spring.config.import=optional:classpath:application-common.properties,optional:classpath:application-infra.properties
 
 # 服务端口
 server.port=8003