我有一个需要从配置服务器刷新配置的控制器,因此我在其上添加了@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/