一、环境初始化与基础配置
在开始构建数字档案馆微服务系统之前,必须确保本地开发环境已配置好以下基础组件。本指南基于 JDK 17、Maven 3.8+ 和 Docker 环境。
1. 基础工具检查
打开终端,执行以下命令验证环境:
java -version:确保版本为 17 或更高。
mvn -v:确保 Maven 配置正确。
docker -v:确保 Docker 服务已启动。
2. 项目初始化
使用 IDEA 创建一个 Maven 项目,命名为 digital-archive-parent,Packaging 选择 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
```
二、基础设施容器化部署
数字档案馆系统依赖 MySQL、Redis 和 Nacos(注册中心与配置中心)。为了实现零门槛启动,我们使用 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-common,Packaging 选择 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. 启动顺序
- 确保 Docker 中的 MySQL、Redis、Nacos 正在运行。
- 运行
ArchiveServiceApplication 主类(端口 8081)。
- 运行
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-service 和 archive-gateway 的 pom.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 创建),即可完成微服务系统的生产级部署。