Files
label_backend/微服务开发规范文档.md
2026-04-14 14:59:46 +08:00

11 KiB
Raw Blame History

微服务开发规范文档

项目概述

本文档记录了当前微服务项目的技术栈、依赖版本、代码风格和项目结构,供新微服务开发时参考。

技术栈版本

核心框架版本

  • Java版本: 21
  • Spring Boot: 3.1.5
  • Spring Cloud: 2022.0.4
  • Spring Cloud Alibaba: 2022.0.0.0
  • Maven: 3.x

主要依赖版本

<!-- 核心依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.5</version>
</parent>

<!-- 数据库相关 -->
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
<mysql-connector-j.version>8.2.0</mysql-connector-j.version>

<!-- 缓存相关 -->
<spring-session.version>3.1.1</spring-session.version>

<!-- 阿里云相关 -->
<aliyun-sdk-version>2.0.23</aliyun-sdk-version>

<!-- 文档相关 -->
<springdoc-openapi.version>2.3.0</springdoc-openapi.version>

<!-- 微信支付 -->
<wechatpay-java.version>0.2.16</wechatpay-java.version>

<!-- 阿里云凭证 -->
<credentials-java.version>0.3.10</credentials-java.version>

项目结构规范

标准目录结构

src/main/java/com/example/{service-name}/
├── annotation/          # 自定义注解
├── aspect/             # AOP切面
├── {ServiceName}Application.java  # 启动类
├── common/             # 公共类
│   ├── exception/      # 异常处理
│   ├── Result.java     # 统一响应结果
│   └── ResultCode.java # 响应码枚举
├── config/             # 配置类
├── constant/           # 常量类
├── controller/         # 控制器
├── dto/               # 数据传输对象
│   ├── request/       # 请求DTO
│   ├── response/      # 响应DTO
│   └── common/        # 公共DTO
├── entity/            # 实体类
├── feign/             # Feign客户端
├── mapper/            # MyBatis映射器
├── scheduled/         # 定时任务
├── service/           # 业务服务
├── typehandler/       # 类型处理器
└── util/              # 工具类

资源文件结构

src/main/resources/
├── application.yml           # 主配置文件
├── application-pro.yml       # 生产环境配置
└── mapper/                  # MyBatis XML映射文件
    └── *.xml

代码风格规范

1. 启动类规范

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients("com.example.{service-name}.feign")
@EnableScheduling
@MapperScan("com.example.{service-name}.mapper")
public class {ServiceName}Application {
    public static void main(String[] args) {
        SpringApplication.run({ServiceName}Application.class, args);
    }
}

2. 统一响应结果类

@Data
public class Result<T> {
    private Integer code;
    private String message;
    private T data;

    public Result() {}

    public Result(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public static <T> Result<T> success() {
        return new Result<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
    }

    public static <T> Result<T> success(T data) {
        return new Result<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    public static <T> Result<T> error(String message) {
        return new Result<>(ResultCode.ERROR.getCode(), message, null);
    }

    public static <T> Result<T> error(ResultCode resultCode) {
        return new Result<>(resultCode.getCode(), resultCode.getMessage(), null);
    }
}

3. 实体类规范

@Data
@TableName("table_name")
public class EntityName {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String fieldName;
    
    @TableField("is_deleted")
    private Integer isDeleted;
    
    @TableField(exist = false)
    private Boolean customField; // 非数据库字段
    
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
}

4. 控制器规范

@Tag(name = "模块名称")
@Slf4j
@RestController
@RequestMapping("/api/v1/module")
@RequiredArgsConstructor
public class ModuleController {
    
    private final ModuleService moduleService;

    @Operation(summary = "接口描述")
    @GetMapping("/endpoint")
    public Result<ResponseType> methodName() {
        // 业务逻辑
        return Result.success(data);
    }
}

5. 服务接口规范

@Service
public interface ModuleService extends IService<EntityName> {
    // 自定义业务方法
}

6. DTO规范

@Data
public class ModuleRequest {
    /**
     * 字段描述
     */
    private String fieldName;
}

配置文件规范

1. 主配置文件 (application.yml)

server:
  port: 8080

spring:
  application:
    name: {service-name}
  profiles:
    active: test
  data:
    redis:
      username: default
      host: ${REDIS_HOST:localhost}
      port: ${REDIS_PORT:6379}
      password: ${REDIS_PASSWORD:}
      database: 0
      timeout: 10000ms
      lettuce:
        pool:
          max-active: 8
          max-idle: 8
          min-idle: 0
          max-wait: -1ms
  session:
    store-type: redis
    timeout: 30m
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER:localhost:8848}
        namespace: ${spring.profiles.active}
        username: ${NACOS_USERNAME:nacos}
        password: ${NACOS_PASSWORD:nacos}
    loadbalancer:
      ribbon:
        enabled: false

# MongoDB配置 (新微服务使用)
spring:
  data:
    mongodb:
      uri: ${MONGODB_URI:mongodb://localhost:27017/database_name}
      database: ${MONGODB_DATABASE:database_name}

# 日志配置
logging:
  level:
    org.springframework.security: DEBUG
    com.example.{service-name}: DEBUG

# Feign配置
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 10000
        loggerLevel: basic
  compression:
    request:
      enabled: true
    response:
      enabled: true

2. 生产环境配置 (application-pro.yml)

# 生产环境特定配置
logging:
  level:
    com.example.{service-name}: INFO

feign:
  client:
    config:
      default:
        loggerLevel: basic

新微服务MongoDB配置

1. 添加MongoDB依赖

<!-- MongoDB依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2. MongoDB配置类

@Configuration
@EnableMongoRepositories(basePackages = "com.example.{service-name}.repository")
public class MongoConfig {
    
    @Bean
    public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDatabaseFactory) {
        return new MongoTemplate(mongoDatabaseFactory);
    }
}

3. MongoDB实体类规范

@Document(collection = "collection_name")
@Data
public class MongoEntity {
    @Id
    private String id;
    
    @Field("field_name")
    private String fieldName;
    
    @CreatedDate
    private LocalDateTime createdAt;
    
    @LastModifiedDate
    private LocalDateTime updatedAt;
}

4. MongoDB Repository规范

@Repository
public interface MongoEntityRepository extends MongoRepository<MongoEntity, String> {
    // 自定义查询方法
    List<MongoEntity> findByFieldName(String fieldName);
}

开发规范

1. 包命名规范

  • 基础包名: com.example.{service-name}
  • 服务名使用小写字母和连字符,如: user-service, order-service

2. 类命名规范

  • 实体类: 使用名词,如 User, Order
  • 控制器: 以 Controller 结尾,如 UserController
  • 服务类: 以 Service 结尾,如 UserService
  • DTO类: 以 Request/Response 结尾,如 UserRequest, UserResponse
  • 常量类: 以 Constants 结尾,如 UserConstants

3. 方法命名规范

  • 查询方法: get, find, list, query
  • 创建方法: create, add, save
  • 更新方法: update, modify
  • 删除方法: delete, remove

4. 异常处理规范

  • 使用统一的异常处理机制
  • 自定义业务异常继承 RuntimeException
  • 使用 @ControllerAdvice 进行全局异常处理

5. 日志规范

  • 使用 @Slf4j 注解
  • 日志级别: DEBUG(开发), INFO(生产)
  • 关键操作必须记录日志

部署配置

1. Dockerfile规范

FROM registry.bjzgzp.com:4433/library/eclipse-temurin:21-jdk-ubi10-minimal

WORKDIR /app

COPY ./target/{service-name}.jar /app/{service-name}.jar

EXPOSE 8080

ENTRYPOINT ["java", "-Djava.net.preferIPv4Stack=true", "-jar", "/app/{service-name}.jar"]

2. Maven配置

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>21</source>
                <target>21</target>
            </configuration>
        </plugin>
    </plugins>
</build>

注意事项

  1. 数据库选择: 新微服务使用MongoDB 6.x移除MySQL相关依赖
  2. 版本兼容性: 确保所有依赖版本与当前项目保持一致
  3. 配置管理: 使用环境变量管理敏感配置信息
  4. 服务发现: 使用Nacos进行服务注册与发现
  5. API文档: 使用SpringDoc OpenAPI 3生成API文档
  6. 缓存策略: 使用Redis进行缓存和会话管理
  7. 监控日志: 集成适当的监控和日志记录机制

快速开始模板

创建新微服务时,可以参考以下步骤:

  1. 复制当前项目的 pom.xml,修改 artifactIdname
  2. 移除MySQL相关依赖添加MongoDB依赖
  3. 复制项目结构,修改包名
  4. 配置MongoDB连接信息
  5. 创建基础的Controller、Service、Repository
  6. 配置Dockerfile和部署脚本

遵循以上规范可以确保新微服务与现有系统保持一致的技术栈和代码风格。