我有一个需要从配置服务器刷新配置的控制器,因此我在其上添加了@RefreshScope。同时,此控制器需要调用后端API,以便我定义了restTemplate Bean。但是一旦启动此应用程序,就会发生异常。谁能告诉我为什么这两个注释成为循环参考?

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;

}

最佳答案

首先,不要将@RefreshScope放在控制器上。通常,您希望在存储状态的类中进行此操作。如果它是配置属性,最好在POJO上使用@ConfigurationProperty批注并调用@EnableConfigurationProperties

另外,您的主要班级会做所有事情,您能否将其分成单独的班级然后重试?让您的主类同时成为控制器,存储库和服务不是一个好主意。

关于java - @RefreshScope无法与@Bean相处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60304849/

10-12 03:10