SpringCloud微服务拆分最佳实践

版本运用分析:

  1. JDK:17
  2. Mysql:8.0.4
  3. Maven:3.9.10
  4. SpringBoot:3.3.13
  5. mybatis-plus:3.5.7
  6. spring-data-redis:3.3.13
  7. spring-cache:3.3.13
  8. spring-cloud:2023.0.1
  9. nacos:3.0.2

Git: gitee.com/jxinyao/spr...

安装Nacos

设置密钥

默认账号和密码

创建项目

其他包删掉

创建emp-service模块 员工

创建dept-service模块 部门

创建common-pojo模块(存放实体类)

创建common-untils模块

修改父工程pom文件

引入父工程依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.jinzhu</groupId>
    <artifactId>System-cold</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>emp-service</module>
        <module>dept-service</module>
        <module>common-pojo</module>
        <module>common-untils</module>
    </modules>
<!--  spring-boot-starter-parent父依赖  -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.13</version>
    </parent>


    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>



</project>

引入共同依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.jinzhu</groupId>
    <artifactId>System-cold</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>emp-service</module>
        <module>dept-service</module>
        <module>common-pojo</module>
        <module>common-untils</module>
        <module>feign-api</module>
    </modules>
<!--  spring-boot-starter-parent父依赖  -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.13</version>
    </parent>


    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot-starter-web.version>3.3.13</spring-boot-starter-web.version>
        


    </properties>

    <!--  引入共有的依赖  -->
    <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot-starter-web.version}</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
    </dependencies>

管理版本依赖(并不会直接引入依赖)

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.jinzhu</groupId>
    <artifactId>System-cold</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>emp-service</module>
        <module>dept-service</module>
        <module>common-pojo</module>
        <module>common-untils</module>
        <module>feign-api</module>
    </modules>
<!--  spring-boot-starter-parent父依赖  -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.13</version>
    </parent>


    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot-starter-web.version>3.3.13</spring-boot-starter-web.version>
        <mybatis-plus.version>3.5.7</mybatis-plus.version>
        <mysql.version>8.0.33</mysql.version>
        <lombok.version>1.18.22</lombok.version>
      


    </properties>

    <!--  引入共有的依赖  -->
    <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot-starter-web.version}</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
    </dependencies>

    <!-- 管理依赖版本  -->
    <dependencyManagement>
        <dependencies>
            <!--mysql-->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

操作common-pojo模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>common-pojo</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

创建包引入实体类

java 复制代码
package cn.jinzhu.Dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeptSimpleDto implements Serializable {
        // 版本控制
        private static final long serialVersionUID = 1L;
        private Integer id;
        private String name;
        private LocalDateTime createTime;

}
java 复制代码
package cn.jinzhu.Dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDate;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmpSimpleDto implements Serializable {
    // 版本控制
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private Short gender;
    private LocalDate entryDate;
    private Integer deptId;
}
java 复制代码
package cn.jinzhu.Dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmpSearchDto {
    private String name;
    private Short gender;
    private LocalDate begin;
    private LocalDate end;
    private Integer page;
    private Integer pageSize;
}

pojo

java 复制代码
package cn.jinzhu.pojo;


import cn.jinzhu.Dto.EmpSimpleDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept implements Serializable {
    // 版本控制
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private List<EmpSimpleDto> empsSimple;
}
kotlin 复制代码
package cn.jinzhu.pojo;

import cn.jinzhu.Dto.DeptSimpleDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("emp")
public class Emp implements Serializable {
    // 版本控制
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Short gender;
    private String phone;
    private Short job;
    private Integer salary;
    private String image;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate entryDate;
    private Integer deptId;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private DeptSimpleDto deptSimple;
}
java 复制代码
package cn.jinzhu.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean  implements Serializable {
    // 版本控制
    private static final long serialVersionUID = 1L;
    private Long total; // 总记录数
    private List rows; // 当前页数据列表
}
typescript 复制代码
package cn.jinzhu.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    // 成员变量
    private Integer code; // 响应码:1:成功,0:失败
    private String msg; // success:成功,error:失败
    private Object data; // 要封装的对象

    // 成功:根据不同的情况返回相对应的结果 无数据返回
    public static Result success(){
        // 创建Result对象
        Result result = new Result();
        // 封装数据
        result.code = 1;
        result.msg = "success";
        // 返回结果
        return result;
    }
    // 成功:根据不同的情况返回相对应的结果 有数据返回
    public static Result success(Object data){
        // 创建Result对象
        Result result = new Result();
        // 封装数据
        result.code = 1;
        result.msg = "success";
        result.data = data;
        // 返回结果
        return result;
    }
    // 失败:根据不同情况返回相对应的结果
    public static Result error(){
        // 创建Result对象
        Result result = new Result();
        // 封装数据
        result.code = 0;
        result.msg = "error";
        return result;
    }
    // 失败:根据不同情况返回相对应的结果
    public static Result error(String msg){
        // 创建Result对象
        Result result = new Result();
        // 封装数据
        result.code = 0;
        result.msg = msg;
        return result;
    }
}

操作common-utils模块

创建包,创建MybatisPlusConfig配置类(分页插件)

kotlin 复制代码
package cn.jinzhu;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

操作dept-service模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dept-service</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--common-pojo-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--common-utils-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-untils</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>

创建包,创建DeptMapper接口

java 复制代码
@Mapper
public interface DeptMapper extends BaseMapper<Dept> {
}

创建包,创建DeptService接口

csharp 复制代码
public interface DeptService extends IService<Dept> {
    // 根据部门ID查询部门信息
    Dept queryById(Integer id);
}

创建包,创建DeptServicelmpl类

scala 复制代码
package cn.jinzhu.service.impl;

import cn.jinzhu.Mapper.DeptMapper;
import cn.jinzhu.pojo.Dept;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import cn.jinzhu.service.DeptService;

@Service
public class DeptServiczeImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
    @Autowired
    DeptMapper deptMapper;

    // 根据部门Id获取部门信息
    @Override
    @Cacheable(cacheNames = "depts",key = "id")
    public Dept queryById(Integer id) {
        Dept dept = deptMapper.selectById(id);
        return dept;
    }

}

创建包,创建DeptController类

kotlin 复制代码
package cn.jinzhu.controller;

import cn.jinzhu.pojo.Dept;
import cn.jinzhu.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.jinzhu.service.DeptService;
@RestController
@RequestMapping("/depts")
@Slf4j
public class DeptController {
    @Autowired
    DeptService deptService;

    // 根据部门ID获取部门信息
    @GetMapping("/{id}")
    public Result queryById(@PathVariable Integer id) {
        log.info("根据部门ID:{}查询部门信息", id);
        Dept dept = deptService.queryById(id);
        return dept != null ? Result.success(dept): Result.error();
    }
}

创建application.yml配置文件

yaml 复制代码
server:
  port: 8080
spring:
  application:
    name: deptservice
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring_school
    username: root
    password: 123456
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true # 开启驼峰命名
logging:
  level:
    com.he: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

创建DeptApplication启动类

typescript 复制代码
package cn.jinzhu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DeptApplication {
    public static void main(String[] args) {
        SpringApplication.run(DeptApplication.class, args);
    }
}

操作emp-service模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>emp-service</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
           
    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--common-pojo-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--     common-untils       -->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-untils</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

创建包,创建EmpMapper接口

java 复制代码
@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}

创建包,创建EmpController类

kotlin 复制代码
package cn.jinzhu.controller;
import cn.jinzhu.Dto.EmpSearchDto;
import cn.jinzhu.pojo.PageBean;
import cn.jinzhu.pojo.Result;
import cn.jinzhu.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    EmpService empService;
    @GetMapping
    public Result queryByInfo(@ModelAttribute EmpSearchDto empSearchDto){
        log.info("查询员工信息,参数:empDto={}", empSearchDto);
        PageBean pageBean = empService.queryByInfo(empSearchDto);
        return pageBean!=null?Result.success(pageBean): Result.error("查询失败!");
    }
}

创建包,创建EmpMapper接口

csharp 复制代码
public interface EmpService extends IService<Emp> {

    PageBean queryByInfo(EmpSearchDto empSearchDto);
}

创建包,创建EmpServiceimpl类

scala 复制代码
package cn.jinzhu.service.impl;

import cn.jinzhu.Dto.EmpSearchDto;
import cn.jinzhu.mapper.EmpMapper;
import cn.jinzhu.pojo.Emp;
import cn.jinzhu.pojo.PageBean;
import cn.jinzhu.service.EmpService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

@Service
public class EmpServiceimpl extends ServiceImpl<EmpMapper,Emp> implements EmpService {
    @Autowired
    EmpMapper empMapper;

    // 根据信息分页查询
    @Cacheable(cacheNames = "empsList",key = "#empSearchDto.hashCode()" )
    public PageBean queryByInfo(EmpSearchDto empSearchDto) {
        // 创建查询条件
        LambdaQueryWrapper<Emp> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(StringUtils.hasLength(empSearchDto.getName()),Emp::getName, empSearchDto.getName())
                .eq(empSearchDto.getGender()!=null,Emp::getGender, empSearchDto.getGender())
                .ge(empSearchDto.getBegin()!=null,Emp::getEntryDate, empSearchDto.getBegin())
                .le(empSearchDto.getEnd()!=null,Emp::getEntryDate, empSearchDto.getEnd());
        // 创建分页条件
        if (empSearchDto.getPage() == null) {
            empSearchDto.setPage(1);
        }
        if (empSearchDto.getPageSize() == null) {
            empSearchDto.setPageSize(5);
        }
        Page<Emp> pageInfo = new Page<>(empSearchDto.getPage(), empSearchDto.getPageSize());
        // 执行查询
        Page<Emp> empPage = empMapper.selectPage(pageInfo, queryWrapper);
        // 封装数据
        PageBean pageBean = new PageBean(empPage.getTotal(), empPage.getRecords());
        // 返回数据
        return pageBean;
    }
}

创建EmpApplication启动类

typescript 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
public class EmpApplication {
    public static void main(String[] args) {
        SpringApplication.run(EmpApplication.class,args);
    }
}

修改父工程pom文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.jinzhu</groupId>
    <artifactId>System-cold</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>emp-service</module>
        <module>dept-service</module>
        <module>common-pojo</module>
        <module>common-untils</module>
        <module>feign-api</module>
    </modules>
<!--  spring-boot-starter-parent父依赖  -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.13</version>
    </parent>


    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot-starter-web.version>3.3.13</spring-boot-starter-web.version>
        <mybatis-plus.version>3.5.7</mybatis-plus.version>
        <mysql.version>8.0.33</mysql.version>
        <lombok.version>1.18.22</lombok.version>

        <spring-cloud.version>2023.0.1</spring-cloud.version>
        <spring-cloud-alibaba-version>2023.0.1.0</spring-cloud-alibaba-version>



    </properties>

    <!--  引入共有的依赖  -->
    <dependencies>
        <!--springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot-starter-web.version}</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
    </dependencies>

    <!-- 管理依赖版本  -->
    <dependencyManagement>
        <dependencies>
            <!--mysql-->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <!-- springCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--nacos-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>
</project>

问题:只引入SpringCloudAlibaba不引入SpringCloud就无法引入Feign依赖

Spring Cloud Alibaba是对Spring Cloud生态的扩展,并非独立替代品;它需与Spring Cloud基础组件协同工作,Feign的注解解析、HTTP请求模板化等核心能力需通过spring-cloud-starter-openfeign提供,如果仅引入Spring Cloud Alibaba而不添加Spring Cloud相关依赖,会导致Feign无法被正确加载或调用

创建feign-api模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>feign-api</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 负载均衡器 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!--httpClient的依赖 -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
        <!--common-pojo-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
            <!-- 模块内部使用,不会传递给其他依赖 -->
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

问题:只引入spring-cloud-starter-openfeign,不引入spring-cloud-starter-loadbalancer,测试时控制台报错

在Spring Cloud项目中仅引入spring-cloud-starter-openfeign而未添加spring-cloud-starter-loadbalancer时,控制台会报错No Feign Client for loadBalancing defined,这是因为自Spring Cloud Hoxton.M2版本后,Feign默认移除了Ribbon依赖,转而使用spring-cloud-loadbalancer实现客户端负载均衡

创建包,创建DeptClient接口

kotlin 复制代码
package cn.jinzhu.client;

import cn.jinzhu.pojo.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("deptservice")
public interface DeptClient {
    @GetMapping("/depts/{id}")
    Result queryDeptSimpleById(@PathVariable Integer id);
}

操作dept-service模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dept-service</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--common-pojo-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--common-utils-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-untils</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--feign-api-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


</project>

修改application.yml配置文件

yaml 复制代码
server:
  port: 8080
spring:
  application:
    name: deptservice
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring_school
    username: root
    password: 123456
  cloud:
    nacos:
      server-addr: localhost:8848
      # Nacos 服务器启用了认证
      username: nacos  # 默认用户名
      password: nacos  # 默认密码
      discovery:
        cluster-name: SZ # 集群名称
        ephemeral: true # 配置是否注册为临时服务,默认是true即临时服务
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true # 开启驼峰命名
logging:
  level:
    com.he: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

操作emp-service模块

修改pom文件引入依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.jinzhu</groupId>
        <artifactId>System-cold</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>emp-service</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--common-pojo-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--     common-untils       -->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>common-untils</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--feign-api-->
        <dependency>
            <groupId>cn.jinzhu</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

修改application.yml配置文件

yaml 复制代码
server:
  port: 8081
spring:
  application:
    name: empservice
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring_school
    username: root
    password: 123456
  cloud:
    nacos:
      server-addr: localhost:8848
      # Nacos 服务器启用了认证
      username: nacos  # 默认用户名
        password: nacos  # 默认密码
      discovery:
        cluster-name: SZ # 集群名称
        ephemeral: true # 配置是否注册为临时服务,默认是true即临时服务
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true # 开启驼峰命名
logging:
  level:
    com.he: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数
deptservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载,默认是false即懒加载
    clients: deptservice    

修改EmpApplication启动类

java 复制代码
package cn.jinzhu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients(clients = {Deprecated.class})
public class EmpApplication {
    public static void main(String[] args) {
        SpringApplication.run(EmpApplication.class,args);
    }
}

修改EmpServiczeImpl类

scss 复制代码
@Service
public class EmpServiczeImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
    @Autowired
    ObjectMapper objectMapper;

    @Autowired
    EmpMapper empMapper;

    @Autowired
    private DeptClient deptClient;

    // 根据信息分页查询
    @Cacheable(cacheNames = "empsList",key = "#empSearchDto.hashCode()" )
    public PageBean queryByInfo(EmpSearchDto empSearchDto) {
        // 创建查询条件
        LambdaQueryWrapper<Emp> queryWrapper = new LambdaQueryWrapper();
        queryWrapper.like(StringUtils.hasLength(empSearchDto.getName()),Emp::getName, empSearchDto.getName())
                .eq(empSearchDto.getGender()!=null,Emp::getGender, empSearchDto.getGender())
                .ge(empSearchDto.getBegin()!=null,Emp::getEntryDate, empSearchDto.getBegin())
                .le(empSearchDto.getEnd()!=null,Emp::getEntryDate, empSearchDto.getEnd());
        // 创建分页条件
        if (empSearchDto.getPage() == null) {
            empSearchDto.setPage(1);
        }
        if (empSearchDto.getPageSize() == null) {
            empSearchDto.setPageSize(5);
        }
        Page<Emp> pageInfo = new Page<>(empSearchDto.getPage(), empSearchDto.getPageSize());
        // 执行查询
        Page<Emp> empPage = empMapper.selectPage(pageInfo, queryWrapper);
        // 为每个员工获取对应的部门信息
        List<Emp> empList = empPage.getRecords().stream().map(emp -> {
            // 调用Feign客户端获取部门信息
            Result deptResult = deptClient.queryDeptSimpleById(emp.getDeptId());
            if (deptResult.getCode() == 1) {
                // 假设员工实体中有部门名称字段 手动转换为部门实体
                Object data = deptResult.getData();
                DeptSimpleDto dept = objectMapper.convertValue(data, DeptSimpleDto.class);
                emp.setDeptSimple(dept);
            }
            return emp;
        }).collect(Collectors.toList());
        // 封装数据
        PageBean pageBean = new PageBean(empPage.getTotal(), empList);
        // 返回数据
        return pageBean;
    }

}

启动测试

启动nacos

复制代码
startup.cmd -m standalone

启动EmptApplication

启动DeptApplication

sql 复制代码
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID,主键',
  `username` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '123456' COMMENT '密码',
  `name` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '姓名',
  `gender` tinyint UNSIGNED NOT NULL COMMENT '性别, 1:男, 2:女',
  `phone` char(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '手机号',
  `job` tinyint UNSIGNED NULL DEFAULT NULL COMMENT '职位, 1 班主任, 2 讲师 , 3 学工主管, 4 教研主管, 5 咨询师',
  `salary` int UNSIGNED NULL DEFAULT NULL COMMENT '薪资',
  `image` varchar(300) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '头像',
  `entry_date` date NULL DEFAULT NULL COMMENT '入职日期',
  `dept_id` int UNSIGNED NULL DEFAULT NULL COMMENT '部门ID',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username` ASC) USING BTREE,
  UNIQUE INDEX `phone`(`phone` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '员工表' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES (2, 'songjiang', '123456', '宋江', 1, '13309090002', 2, 19000, '01.png', '2015-01-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:35:37');
INSERT INTO `emp` VALUES (3, 'yucengdong', '123456', '余承东', 1, '13309090003', 1, 28900, '01.png', '2008-05-01', 1, '2025-08-02 16:09:25', '2025-08-02 16:09:25');
INSERT INTO `emp` VALUES (8, 'likui', '123456', '李逵', 1, '13309090008', 1, 15800, '01.png', '2014-11-09', 1, '2023-10-20 16:35:33', '2023-10-20 16:35:49');
INSERT INTO `emp` VALUES (10, 'linchong', '123456', '林冲', 1, '13309090010', 1, 5000, '01.png', '2013-09-05', 1, '2023-10-20 16:35:33', '2023-10-20 16:35:53');
INSERT INTO `emp` VALUES (11, 'huyanzhuo', '123456', '呼延灼', 1, '13309090011', 2, 11700, '01.png', '2007-02-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:35:55');
INSERT INTO `emp` VALUES (12, 'xiaoliguang', '123456', '小李广', 1, '13309090012', 2, 12000, '01.png', '2008-08-18', 2, '2023-10-20 16:35:33', '2023-10-20 16:35:57');
INSERT INTO `emp` VALUES (13, 'yangzhi', '123456', '杨志', 1, '13309090013', 1, 17300, '01.png', '2012-11-01', 1, '2023-10-20 16:35:33', '2023-10-20 16:35:59');
INSERT INTO `emp` VALUES (14, 'shijin', '123456', '史进', 1, '13309090014', 2, 12600, '01.png', '2002-08-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:01');
INSERT INTO `emp` VALUES (15, 'sunerniang', '123456', '孙二娘', 2, '13309090015', 2, 12900, '01.png', '2011-05-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:03');
INSERT INTO `emp` VALUES (16, 'luzhishen', '123456', '鲁智深', 1, '13309090016', 2, 11600, '01.png', '2010-01-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:05');
INSERT INTO `emp` VALUES (17, 'liying', '12345678', '李应', 1, '13309090017', 1, 15800, '01.png', '2015-03-21', 1, '2023-10-20 16:35:33', '2023-10-20 16:36:07');
INSERT INTO `emp` VALUES (18, 'shiqian', '123456', '时迁', 1, '13309090018', 2, 10200, '01.png', '2015-01-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:09');
INSERT INTO `emp` VALUES (19, 'gudasao', '123456', '顾大嫂', 2, '13309090019', 2, 10500, '01.png', '2008-01-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:11');
INSERT INTO `emp` VALUES (20, 'ruanxiaoer', '123456', '阮小二', 1, '13309090020', 2, 10800, '01.png', '2018-01-01', 2, '2023-10-20 16:35:33', '2023-10-20 16:36:13');
INSERT INTO `emp` VALUES (21, 'ruanxiaowu', '123456', '阮小五', 1, '13309090021', 5, 5200, '01.png', '2015-01-01', 3, '2023-10-20 16:35:33', '2023-10-20 16:36:15');
INSERT INTO `emp` VALUES (22, 'ruanxiaoqi', '123456', '阮小七', 1, '13309090022', 5, 5500, '01.png', '2016-01-01', 3, '2023-10-20 16:35:33', '2023-10-20 16:36:17');
INSERT INTO `emp` VALUES (23, 'ruanji', '123456', '阮籍', 1, '13309090023', 5, 5800, '01.png', '2012-01-01', 3, '2023-10-20 16:35:33', '2023-10-20 16:36:19');
INSERT INTO `emp` VALUES (24, 'tongwei', '123456', '童威', 1, '13309090024', 5, 5000, '01.png', '2006-01-01', 3, '2023-10-20 16:35:33', '2023-10-20 16:36:21');
INSERT INTO `emp` VALUES (25, 'tongmeng', '123456', '童猛', 1, '13309090025', 5, 4800, '01.png', '2002-01-01', 3, '2023-10-20 16:35:33', '2023-10-20 16:36:23');
INSERT INTO `emp` VALUES (26, 'yanshun', '123456', '燕顺', 1, '13309090026', 5, 5400, '01.png', '2011-01-01', 3, '2023-10-20 16:35:33', '2023-11-08 22:12:46');
INSERT INTO `emp` VALUES (27, 'lijun', '123456', '李俊', 1, '13309090027', 2, 6600, '8.png', '2004-01-01', 2, '2023-10-20 16:35:33', '2023-11-16 17:56:59');
INSERT INTO `emp` VALUES (28, 'lizhong', '123456', '李忠', 1, '13309090028', 5, 5000, '6.png', '2007-01-01', 3, '2023-10-20 16:35:33', '2023-11-17 16:34:22');
INSERT INTO `emp` VALUES (30, 'liyun', '123456', '李云', 1, '13309090030', NULL, NULL, '01.png', '2020-03-01', NULL, '2023-10-20 16:35:33', '2023-10-20 16:36:31');
INSERT INTO `emp` VALUES (36, 'linghuchong', '123456', '令狐冲', 1, '18809091212', 2, 6800, '1.png', '2023-10-19', 2, '2023-10-20 20:44:54', '2023-11-09 09:41:04');
INSERT INTO `emp` VALUES (38, 'mahuateng', '123456', '马化腾', 2, '22222', 5, 295000, '5.png', NULL, NULL, '2025-07-21 20:28:18', '2025-07-21 20:28:18');
INSERT INTO `emp` VALUES (47, 'leijun', '123456', '雷军', 1, '1330901', 4, 25000, NULL, NULL, NULL, '2025-07-21 20:33:23', '2025-07-21 20:33:23');
INSERT INTO `emp` VALUES (48, 'xuezhiqian', '1236', '薛之谦', 2, '13309001', 6, 200, '1.png', '2000-01-01', 2, NULL, '2025-07-21 20:45:38');
INSERT INTO `emp` VALUES (49, 'linjunjie', '123456', '林俊杰', 1, '133090', 3, 180, '02.png', '2015-01-01', 4, NULL, '2025-07-21 21:36:34');
INSERT INTO `emp` VALUES (56, 'caocao', '1234', '曹操', 1, '1330909', 1, NULL, '01.png', '2015-01-01', 3, '2025-08-02 16:06:41', '2025-08-02 16:06:41');

SET FOREIGN_KEY_CHECKS = 1;
sql 复制代码
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID, 主键',
  `name` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '部门名称',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `name`(`name` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES (6, '大部', '2025-07-21 10:18:52', '2025-07-21 14:58:03');
INSERT INTO `dept` VALUES (15, '行政部', '2023-11-30 20:56:37', '2023-11-30 20:56:37');
INSERT INTO `dept` VALUES (17, '武装部', '2025-07-18 23:08:08', '2025-07-18 23:08:08');
INSERT INTO `dept` VALUES (18, '部门', '2025-07-21 14:55:24', '2025-07-21 14:55:24');
INSERT INTO `dept` VALUES (20, '后勤部', '2025-07-21 22:14:41', '2025-07-21 22:14:41');
INSERT INTO `dept` VALUES (21, '员工部', '2025-07-21 22:15:09', '2025-07-21 22:15:09');
INSERT INTO `dept` VALUES (32, '教师部', '2023-09-25 09:47:40', '2023-11-30 21:26:24');
INSERT INTO `dept` VALUES (33, '师长', '2023-09-25 09:47:40', '2023-11-30 21:26:24');
INSERT INTO `dept` VALUES (35, '装甲部', '2025-08-02 13:35:41', '2025-08-02 13:35:41');

SET FOREIGN_KEY_CHECKS = 1;
相关推荐
Rain的Java大神之路3 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
需要8263 天前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat
需要8263 天前
Arthas 一个命令排查线上问题
java·jvm·spring·spring cloud
苏渡苇4 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
叶总没有会4 天前
Nacos—注册中心
spring cloud·微服务
苏渡苇5 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring·spring cloud·系统监控·apm
叶总没有会5 天前
微服务--分布式基础
java·spring·spring cloud·微服务
孙启超6 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
行百里er7 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring cloud·监控
砍材农夫7 天前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud