Внедрение симулированного клиента - PullRequest
0 голосов
/ 21 июня 2019

У меня ошибка при вводе интерфейса feignClient в мой сервис.ниже версии весенняя загрузка и весеннее облако, которое я использую

org.springframework.boot: spring-boot-starter-parent: 2.0.6.RELEASE версия весеннего облака: Finchley.SR2 Но когда я создаю объектный bean-компонентв моем сервисе класса это работает заранее за ваше воспроизведение. Создайте собственный симулированный клиент:

@Component("DepartmentClient")
@FeignClient(name = "DEPARTMENT-SERVICE", url = "http://test")
public interface DepartmentClient {

    @RequestMapping(value = "/department/{departmentId}", method = RequestMethod.GET)
    void findDepartmetById(@PathVariable("departmentId") int departmentId);

}

Я внедряю этого симулированного клиента в сервис, как

@Service
public class AgentService {

    Logger logger = LoggerFactory.getLogger(AgentService.class);

    @Autowired
    private AgentRepository agentRepository;

    @Autowired
    private DepartmentClient departmentClient;
....
}

Вывод

Field departmentClient in ...AgentService required a bean of type '...DepartmentClient' that could not be found.
The injection point has the following annotations:
org.springframework.beans.factory.annotation.Autowired(required=true)
Action:

Consider defining a bean of type .... DepartmentClient' in your configuration.

Ответы [ 3 ]

0 голосов
/ 21 июня 2019

Для работы Feign Client необходимо добавить @EnableFeignClients к Configuration class или @SpringBootApplication class

@SpringBootApplication
@EnableFeignClients
public class FooMain {  // Your Main class
    public static void main(String[] args) {
        SpringApplication.run(FooMain.class, args);
    }
}
0 голосов
/ 24 июня 2019

Добавление более подробной информации ниже к ответу выше:

В аннотации @FeignClient значение String («отдел» выше) - это произвольное имя клиента, которое используется для созданияБалансировщик нагрузки ленты.Вы также можете указать URL, используя атрибут url (абсолютное значение или просто имя хоста).Имя компонента в контексте приложения является полностью определенным именем интерфейса.Чтобы указать собственное значение псевдонима, вы можете использовать значение квалификатора аннотации @FeignClient.

Чтобы заставить клиента Feign работать, ниже необходимо выполнить следующие шаги:

1.Изменения в клиенте Feign. Это должен быть интерфейс с аннотацией клиента Feign

@FeignClient(
  name = "DEPARTMENT-SERVICE",
  configuration = {DepartmentConfiguration.class},
  fallback = DepartmentFallback.class
)
@RequestMapping(
  value = {"${service.apipath.department}"},
  consumes = {"application/json"},
  produces = {"application/json"}
)
public interface DepartmentClient {

  @RequestMapping(value = "/department/{departmentId}", method = 
    RequestMethod.GET)
  void findDepartmetById(@PathVariable("departmentId") int departmentId);

}

2.Изменения в основном классе:

@EnableFeignClients
@SpringBootApplication
public class DepartmentApplication {
  public static void main(String[] args) {
    SpringApplication.run(DepartmentApplication.class, args);
  }
}
0 голосов
/ 21 июня 2019

Вы пытались удалить @Component feign интерфейса?

Еще посмотрите на весеннее компонентное сканирование приложения, если ваш интерфейс не сканируется, бин не будет создан

...