@EnableFeignClients和@FeignClient 使用详情

  • Post author:
  • Post category:其他


一、@EnableFeignClients

一般在spring cloud项目中,我们会用到 feign 去远程调用,实现多模块之间的服务调用。一般定义一个feign接口我们需要做一下四件事情。

1. 使用注解@EnableFeignClients启用feign客户端;扫描和注册feign客户端bean定义

@EnableFeignClients注解中的basePackges属性中是一个数组,可以填写多个值,其主要作用是指定当前模块中需要用到那些地址下的feign接口,起到一个discovery发现feign接口的作用。

@SpringBootApplication
@ComponentScan(value = {"******"})
@MapperScan(basePackages = "******")
@EnableFeignClients(basePackages = {"com.test.*"})
public class TestServiceApplication {

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

}

2.使用@FeignClient注解,定义feign客户端,使当前类中的feign接口能被发现。

在@FeignClient注解中,我们常用的就是contextId、value、path三个属性。

contextId:属于该类在被创建为bean时的bean名称,一般和类名一样就行了。

value:其值为该服务在nacos中定义的服务名称。

path:意思和controller层中@RequestMapping注解中的value属性类似,为该类中的访问地址添加地址前缀。

@FeignClient(contextId ="ProjectInfoClient ", value = "gumap-web-service",path="/projectInfo")
public interface ProjectInfoClient {


    @GetMapping("/getByProjectId")
    ProjectDto getByProjectId(@RequestParam("projectId")Integer projectId);

}

3.在所需类中使用@Autowired或者@Resource注解引用feign,实现远程调用。

    @Autowired   
    private ProjectInfoClient projectInfoClient;


    public void run() {

        // 这里的使用本地Java API的方式调用远程的Restful接口

        ProjectDto dto = projectInfoClient.getByProjectId(111);

        log.info("projectInfo: {}", dto);

     }

4.在controller层中创建一个类去实现feign接口,创建feign接口的方法体就行啦。

@RestController
@RequestMapping("/projectInfo")
public class ProjectInfoController implements ProjectInfoClient {

    @Autowired
    private ProjecInfoService projectInfoService;


    @Override
    public ProjectDto getByProjectId(@RequestParam("projectId")Integer projectId) {
        ProjectDto projectDto = null;
        ProjectInfoEntity projectInfoEntity = projecInfoService.getByProjectId(projectId);
        if (projectInfoEntity != null){
            projectDto = new ProjectDto();
            BeanUtils.copyProperties(projectInfoEntity,projectDto);
        }
        return projectDto;
    }



版权声明:本文为King_of_liuguan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。