基于微服务架构的现代档案管理系统建设全流程
一、开发环境与基础依赖安装
在开始构建之前,必须准备标准化的开发环境。本系统基于Spring Boot 3.x、MySQL 8.0及Docker构建,确保环境版本一致是避免兼容性问题的关键。
1. 安装JDK 17
系统要求JDK 17及以上版本。在Linux终端执行以下命令安装OpenJDK 17:
```bash sudo apt update sudo apt install openjdk-17-jdk -y java -version ```2. 安装Maven 3.8+
用于构建Java项目,执行如下命令安装Maven:
```bash wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz -P /tmp sudo tar xf /tmp/apache-maven-3.9.5-bin.tar.gz -C /opt sudo ln -s /opt/apache-maven-3.9.5 /opt/maven export PATH=/opt/maven/bin:$PATH mvn -version ```3. 安装Docker与Docker Compose
用于服务容器化部署,执行以下脚本:
```bash curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER ```二、数据库架构设计与初始化
档案管理的核心在于元数据的结构化存储与全文检索能力。此处使用MySQL 8.0的InnoDB引擎,并利用全文索引支持档案内容的快速检索。
1. 创建数据库与表结构
连接MySQL数据库,执行以下SQL脚本。该脚本包含档案主表、分类表及必要的索引优化:
```sql CREATE DATABASE IF NOT EXISTS digital_archive DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE digital_archive; -- 档案分类表 CREATE TABLE archive_category ( id BIGINT AUTO_INCREMENT PRIMARY KEY, category_name VARCHAR(100) NOT NULL, parent_id BIGINT DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_parent (parent_id) ) ENGINE=InnoDB; -- 档案主表 CREATE TABLE archive_record ( id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL COMMENT '档案标题', category_id BIGINT NOT NULL COMMENT '关联分类ID', file_path VARCHAR(500) NOT NULL COMMENT '物理存储路径', file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)', mime_type VARCHAR(100) COMMENT '文件MIME类型', content TEXT COMMENT 'OCR识别后的文本内容,用于全文检索', status TINYINT DEFAULT 1 COMMENT '状态:1-正常,0-删除', created_by VARCHAR(50) DEFAULT 'system', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FULLTEXT KEY ft_content (title, content) -- 全文检索索引 ) ENGINE=InnoDB; -- 插入初始化分类数据 INSERT INTO archive_category (category_name, parent_id) VALUES ('行政文书', 0); INSERT INTO archive_category (category_name, parent_id) VALUES ('技术图纸', 0); ```三、后端核心服务搭建
后端采用Spring Boot 3.x框架,提供RESTful API接口。为了实现快速落地,此处展示核心配置与代码实现。
1. 项目结构初始化
使用Spring Initializr生成项目,依赖选择:Spring Web、Spring Data JPA、MySQL Driver、Lombok。项目目录结构如下:
```text src/main/java/com/example/archive/ ├── ArchiveApplication.java ├── controller/ │ └── ArchiveController.java ├── entity/ │ └── ArchiveRecord.java ├── repository/ │ └── ArchiveRepository.java └── service/ └── ArchiveService.java ```2. 配置文件 application.yml
在src/main/resources/application.yml中配置数据库连接及JPA属性:
3. 核心实体类 ArchiveRecord.java
定义档案实体,映射数据库表结构:
```java package com.example.archive.entity; import jakarta.persistence.; import lombok.Data; import java.time.LocalDateTime; @Data @Entity @Table(name = "archive_record") public class ArchiveRecord { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private Long categoryId; private String filePath; private Long fileSize; private String mimeType; @Column(columnDefinition = "TEXT") private String content; private Integer status; private String createdBy; private LocalDateTime createdAt; private LocalDateTime updatedAt; } ```4. 数据访问层 ArchiveRepository.java

继承JpaRepository,并自定义全文检索方法:
```java package com.example.archive.repository; import com.example.archive.entity.ArchiveRecord; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface ArchiveRepository extends JpaRepository5. 控制器层 ArchiveController.java
提供档案上传与检索接口:
```java package com.example.archive.controller; import com.example.archive.entity.ArchiveRecord; import com.example.archive.repository.ArchiveRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @RestController @RequestMapping("/api/archives") public class ArchiveController { @Autowired private ArchiveRepository archiveRepository; private final String UPLOAD_DIR = "/data/uploads"; // 文件上传与元数据保存 @PostMapping("/upload") public Map四、容器化部署配置
为了实现“与时俱进”的交付能力,必须将应用容器化。以下配置将后端应用与MySQL数据库编排在一起。
1. 后端 Dockerfile
在项目根目录创建Dockerfile:
2. Docker Compose 编排文件
创建docker-compose.yml,一键启动所有服务:
五、系统运行与接口测试
完成代码编写后,通过Docker Compose启动系统,并使用curl命令验证核心功能。
1. 启动服务
确保init.sql文件包含第二部分的SQL脚本,并放在当前目录下。执行启动命令:
查看日志确认启动成功:
```bash docker-compose logs -f app ```2. 测试档案上传接口
准备一个测试文件test.txt,内容为“这是测试档案内容”。执行以下命令上传:
预期返回JSON包含"code": 200及生成的档案ID。
3. 测试全文检索接口
使用关键词“技术”检索刚才上传的档案:
```bash curl "http://localhost:8080/api/archives/search?keyword=技术" ```系统应返回包含该档案元数据的JSON数组。至此,一个具备现代架构特征、支持容器化部署的轻量级档案管理系统已完全落地。