@RefreshScope не может ужиться с @Bean - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть контроллер, который требует refre sh config с сервера конфигурации, поэтому я добавляю на него @RefreshScope. Между тем этот контроллер должен вызывать бэкэнд API, чтобы я определил Bean restTemplate. Но как только я запускаю это приложение, возникает исключение. Может кто-нибудь сказать мне, почему эти две аннотации делают циркулирующую ссылку?

Error: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'scopedTarget.frontEndApplication': 
Unsatisfied dependency expressed through field 'restTemplate'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'restTemplate': Requested bean is currently in creation: Is there an unresolvable circular reference?
@SpringBootApplication
@RestController
@EnableDiscoveryClient
@RefreshScope
public class FrontEndApplication {
    @Value("${msg:Hello default}")
    private String message;

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

    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    RestTemplate restTemplate;

}

1 Ответ

0 голосов
/ 19 февраля 2020

Во-первых, не кладите @RefreshScope на контроллер. Как правило, вы хотите сделать это в классе, который хранит состояние. Если это свойство конфигурации, лучше использовать аннотацию @ConfigurationProperty в POJO и вызывать @EnableConfigurationProperties.

Также ваш основной класс делает все, можете ли вы просто разделить его на отдельные классы и попробовать еще раз? Не стоит, чтобы ваш основной класс был одновременно и контроллером, и хранилищем, и службой.

...