一、@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 版权协议,转载请附上原文出处链接和本声明。