Автоматическое подключение клиента Feign в моем контроллере при весеннем запуске выдает исключение - PullRequest
0 голосов
/ 11 сентября 2018

Я уже пробовал решения для этого и этого , но безуспешно, поэтому, возможно, я упускаю что-то еще

вот моя архитектура

У меня есть микросервис ресурсов, защищенный Oauth2, который реализует мою бизнес-логику, и клиентский микросервис с шаблоном thymleaf, который потребляет этот ресурс.Использование Oauth2RestTemplate - это нормально, теперь я пытаюсь использовать feign.

сначала вот мое резюме по проекту ресурса

Application.yml

spring.application.name: COMPONENTS

server:
  port: 0



eureka.client.service-url.defaultZone: xxxxxxxxxxxxxxxxxxxxxxxx

security.oauth2.resource.token-info-uri: xxxxxxxxxxxxxxxxxxxxxx
security.oauth2.client.client-id: xxxxxxxxxxxxxx
security.oauth2.client.client-secret: xxxxxxxxxxxxx

spring.jackson.date-format: com.fasterxml.jackson.databind.util.ISO8601DateFormat


spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/pos_auth?createDatabaseIfNotExist=true
    username: root
    password: xxxxxxxx
    driver-class-name: org.mariadb.jdbc.Driver

И простой контроллер

@Controller
@RequestMapping(ApplicationController.API)
public class ApplicationController {

    public static final String API = "applications";

    @Autowired
    private ComponentsService componentsService;

    @GetMapping
    public ResponseEntity<List<Apps>> getApplicationsList() {
        return new ResponseEntity<List<Apps>>(componentsService.getAllApps(), HttpStatus.OK);
    }


}

Теперь вот мой клиент, важная часть реализации клиента Feign

основной класс

@SpringBootApplication
@EnableOAuth2Sso
@EnableEurekaClient
@EnableDiscoveryClient
@EnableWebSecurity
public class ClientApplication extends WebSecurityConfigurerAdapter{


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


        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .logout()
                    .logoutSuccessUrl("http://localhost:9999/uaa/exit");
            http.authorizeRequests().antMatchers("/graphics/**").permitAll().
                    and().authorizeRequests().anyRequest().authenticated();
        }


    @Bean
    @LoadBalanced
    OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext, OAuth2ProtectedResourceDetails details) {
        return new OAuth2RestTemplate(details, oauth2ClientContext);
    }

    @Profile("!cloud")
    @Bean
    RequestDumperFilter requestDumperFilter() {
        return new RequestDumperFilter();
    }

}

Конфигурация симуляции

@Configuration
@EnableFeignClients
@ImportAutoConfiguration({RibbonAutoConfiguration.class, FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class})
public class FeignConfig {

}

Мое желаемое поведение вконтроллер клиента, когда вызывается индекс

@Controller
public class MessageController {

    @Autowired
    OAuth2RestTemplate restTemplate;


    @Autowired
    private AppClientFeign appClientFeign;


    @RequestMapping("/")
    String home(Model model) {
        model.addAttribute("applications", appClientFeign.getApps());
        System.out.println(appClientFeign.getApps());
        return "index";
    }


}

наконец, мой симулированный клиент

@FeignClient("COMPONENTS")
public interface AppClientFeign {
    @RequestMapping(method = RequestMethod.GET, value = "/applications")
    List<App> getApps();
}

при запуске клиента я получаю следующее исключение

Поле appClientFeignв demo.MessageController требуется bean-компонент типа 'org.springframework.cloud.netflix.feign.FeignContext', который не может быть найден.

  • Метод бина 'feignContext' не загружен, поскольку @ConditionalOnClass не нашелОбязательный класс 'feign.Feign'

1 Ответ

0 голосов
/ 11 сентября 2018

объяснение: зная, что у весеннего облака по умолчанию Feign без добавления зависимости feign для стартера, это не вызовет проблем со временем компиляции (как при использовании javax jpa, который должен быть введен стартовым проектом JPA данных), в моем случае я забыл добавить стартер в проект pom Весенний поиск реализации или конфигурации, которые он не может найти.

решение добавление симметричной зависимости стартера

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
...