数字档案馆微服务系统搭建与部署全流程实战

一、环境初始化与基础配置

在开始构建数字档案馆微服务系统之前,必须确保本地开发环境已配置好以下基础组件。本指南基于 JDK 17Maven 3.8+Docker 环境。

1. 基础工具检查

打开终端,执行以下命令验证环境:

  • java -version:确保版本为 17 或更高。
  • mvn -v:确保 Maven 配置正确。
  • docker -v:确保 Docker 服务已启动。

2. 项目初始化

使用 IDEA 创建一个 Maven 项目,命名为 digital-archive-parentPackaging 选择 pom。该工程将作为所有微服务的父工程,统一管理依赖版本。

在父工程的 pom.xml 中配置 Spring Boot 和 Spring Cloud 依赖管理(版本选型为稳定的 Spring Boot 3.2.0 和 Spring Cloud 2023.0.0):

```xml org.springframework.boot spring-boot-dependencies 3.2.0 pom import org.springframework.cloud spring-cloud-dependencies 2023.0.0 pom import com.mysql mysql-connector-j 8.2.0 com.baomidou mybatis-plus-spring-boot3-starter 3.5.5 ```

二、基础设施容器化部署

数字档案馆系统依赖 MySQLRedisNacos(注册中心与配置中心)。为了实现零门槛启动,我们使用 Docker Compose 一键拉起这些中间件。

在项目根目录下创建文件 docker-compose.yml,直接复制以下内容:

```yaml version: '3.8' services: mysql: image: mysql:8.0 container_name: archive_mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: digital_archive ports: - "3306:3306" volumes: - ./mysql-data:/var/lib/mysql redis: image: redis:7.2-alpine container_name: archive_redis ports: - "6379:6379" nacos: image: nacos/nacos-server:v2.3.0 container_name: archive_nacos environment: MODE: standalone SPRING_DATASOURCE_PLATFORM: mysql MYSQL_SERVICE_HOST: mysql MYSQL_SERVICE_DB_NAME: nacos_config MYSQL_SERVICE_USER: root MYSQL_SERVICE_PASSWORD: root ports: - "8848:8848" depends_on: - mysql ```

执行启动命令:

在终端执行 docker-compose up -d。等待约 30 秒,所有服务启动完毕。访问 http://localhost:8848/nacos,账号密码均为 nacos,验证 Nacos 是否正常。

三、构建公共模块

创建 Maven Module 模块 archive-commonPackaging 选择 jar。该模块用于存放实体类、工具类和统一响应结果。

1. 统一响应结果类

archive-common 中创建 Result 类:

```java package com.archive.common; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result { private Integer code; private String message; private T data; public static Result ok(T data) { return new Result<>(200, "success", data); } public static Result fail(String msg) { return new Result<>(500, msg, null); } } ``>

注意:需在 pom.xml 中引入 lombok 依赖。

四、开发核心档案微服务

创建 Maven Module 模块 archive-service,作为核心业务服务。

1. 依赖配置

修改 archive-service/pom.xml,引入 Web、Nacos Discovery、MySQL 驱动和 MyBatis Plus:

```xml org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.baomidou mybatis-plus-spring-boot3-starter com.mysql mysql-connector-j com.archive archive-common 1.0-SNAPSHOT ```

2. 配置文件

src/main/resources/application.yml 中配置服务名、端口及数据源:

```yaml server: port: 8081 spring: application: name: archive-service cloud: nacos: discovery: server-addr: localhost:8848 datasource: url: jdbc:mysql://localhost:3306/digital_archive?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 ```

3. 数据库初始化

在 MySQL 的 digital_archive 库中执行以下 SQL 建表:

```sql CREATE TABLE `archive_file` ( `id` bigint NOT NULL AUTO_INCREMENT, `file_name` varchar(255) DEFAULT NULL COMMENT '文件名称', `file_path` varchar(500) DEFAULT NULL COMMENT '存储路径', `file_size` bigint DEFAULT NULL COMMENT '文件大小', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

4. 代码实现

创建实体类 ArchiveFile

```java package com.archive.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.time.LocalDateTime; @Data public class ArchiveFile { @TableId(type = IdType.AUTO) private Long id; private String fileName; private String filePath; private Long fileSize; private LocalDateTime createTime; } ```

创建 Mapper 接口:

```java package com.archive.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.archive.entity.ArchiveFile; import org.apache.ibatis.annotations.Mapper; @Mapper public interface ArchiveFileMapper extends BaseMapper { } ```

数字档案馆微服务系统搭建与部署全流程实战

创建 Service 层:

```java package com.archive.service; import com.archive.entity.ArchiveFile; import com.archive.mapper.ArchiveFileMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ArchiveService { @Autowired private ArchiveFileMapper archiveFileMapper; public List getAllFiles() { return archiveFileMapper.selectList(null); } public void addFile(ArchiveFile file) { archiveFileMapper.insert(file); } } ```

创建 Controller 层:

```java package com.archive.controller; import com.archive.common.Result; import com.archive.entity.ArchiveFile; import com.archive.service.ArchiveService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import java.util.List; @RestController @RequestMapping("/api/archive") public class ArchiveController { @Autowired private ArchiveService archiveService; @GetMapping("/list") public Result> list() { return Result.ok(archiveService.getAllFiles()); } @PostMapping("/add") public Result add(@RequestBody ArchiveFile file) { archiveService.addFile(file); return Result.ok("上传成功"); } } ```

在启动类上添加注解 @MapperScan("com.archive.mapper")

五、搭建网关服务

创建 Maven Module 模块 archive-gateway。网关负责统一流量入口和路由转发。

1. 依赖配置

```xml org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ```

2. 路由配置

application.yml 中配置路由规则,将 /archive 开头的请求转发至 archive-service

```yaml server: port: 8080 spring: application: name: archive-gateway cloud: nacos: discovery: server-addr: localhost:8848 gateway: discovery: locator: enabled: true routes: - id: gateway_archive uri: lb://archive-service predicates: - Path=/api/archive/ ```

六、系统运行与验证

1. 启动顺序

  1. 确保 Docker 中的 MySQL、Redis、Nacos 正在运行。
  2. 运行 ArchiveServiceApplication 主类(端口 8081)。
  3. 运行 ArchiveGatewayApplication 主类(端口 8080)。

2. 功能验证

使用 Postman 或 cURL 进行接口测试。

测试新增档案:

http://localhost:8080/api/archive/add 发送 POST 请求:

```json { "fileName": "2023年度财务报表.pdf", "filePath": "/data/files/2023/finance.pdf", "fileSize": 1024000 } ```

预期返回:{"code":200,"message":"success","data":"上传成功"}

测试查询列表:

http://localhost:8080/api/archive/list 发送 GET 请求。预期返回包含刚才插入数据的 JSON 列表。

七、生产环境打包部署

在开发环境验证无误后,我们需要将服务打包为 Docker 镜像进行部署。

1. 添加打包插件

archive-servicearchive-gatewaypom.xml 中添加:

```xml org.springframework.boot spring-boot-maven-plugin ```

2. 构建镜像

在项目根目录下,分别为两个服务创建 Dockerfile

archive-service/Dockerfile

```dockerfile FROM openjdk:17-slim WORKDIR /app COPY target/archive-service-1.0-SNAPSHOT.jar app.jar EXPOSE 8081 ENTRYPOINT ["java", "-jar", "app.jar"] ```

3. 编译与运行

执行命令打包:mvn clean package -DskipTests

执行命令构建镜像:docker build -t archive-service:1.0 ./archive-service

最后使用 docker run 启动容器,确保连接到同一个 Docker 网络(可通过 docker network create archive-net 创建),即可完成微服务系统的生产级部署。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统