升级spring boot:由于循环依赖关系,rest模板bean创建失败

hfwmuf9z  于 2021-07-16  发布在  Java
关注(0)|答案(0)|浏览(299)

我正在将SpringBoot应用程序从1.5.6.release更新到2.3.5,但在生成项目时出现异常。下面是我的错误类:

  1. @Configuration
  2. @EnableBatchProcessing
  3. @Import({BatchScheduler.class})
  4. public class MyLogBatchConfiguration {
  5. private static final Logger log = LoggerFactory.getLogger(VToolLogBatchConfiguration.class);
  6. @Autowired private SimpleJobLauncher jobLauncher;
  7. @Autowired
  8. @Qualifier(value = "dataSource1")
  9. public DataSource mainDataSource;
  10. @Autowired
  11. @Qualifier(value = "dataSource2")
  12. public DataSource tempDataSource;
  13. @Autowired public StepBuilderFactory stepBuilderFactory;
  14. @Autowired public JobBuilderFactory jobBuilderFactory;
  15. @Autowired private RestTemplate myRestTemplate;
  16. @Qualifier(value = "createLocalSessionFactory")
  17. @Autowired
  18. private SessionFactory createLocalSessionFactory;
  19. @Qualifier(value = "createSessionFactory")
  20. @Autowired
  21. private SessionFactory createSessionFactory;
  22. @Bean
  23. RestTemplate restTemplate(RestTemplateBuilder builder) {
  24. RestTemplate restTemplate = new RestTemplate();
  25. List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
  26. for (HttpMessageConverter<?> converter : converters) {
  27. if (converter instanceof MappingJackson2HttpMessageConverter) {
  28. MappingJackson2HttpMessageConverter jsonConverter =
  29. (MappingJackson2HttpMessageConverter) converter;
  30. jsonConverter.setObjectMapper(new ObjectMapper());
  31. jsonConverter.setSupportedMediaTypes(
  32. ImmutableList.of(
  33. new MediaType(
  34. "application", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET),
  35. new MediaType(
  36. "text", "javascript", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));
  37. }
  38. }
  39. return restTemplate;
  40. }
  41. @Bean
  42. public LocalSessionFactoryBean createLocalSessionFactory(
  43. @Qualifier("dataSource1") DataSource dataSource) {
  44. LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
  45. factory.setDataSource(dataSource);
  46. factory.setPackagesToScan(
  47. new String[] {
  48. "X",
  49. "Y",
  50. "Z"
  51. });
  52. factory.setHibernateProperties(hibernateProperties());
  53. return factory;
  54. }
  55. @Bean
  56. public LocalSessionFactoryBean createSessionFactory(
  57. @Qualifier("dataSource2") DataSource dataSource) {
  58. LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
  59. factory.setDataSource(dataSource);
  60. factory.setPackagesToScan(
  61. new String[] {
  62. "X",
  63. "Y",
  64. "Z"
  65. });
  66. factory.setHibernateProperties(hibernateProperties());
  67. return factory;
  68. }

我收到以下错误:
org.springframework.beans.factory.unsatifieddependencyException:创建名为“mylogbatchconfiguration”的bean时出错:通过字段“myrestemplate”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifieddependencyException:创建名为“batchconfiguration”的bean时出错:通过字段“myrestemplate”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.beancreationexception:创建名为“restemplate”的bean时出错,该bean在类路径资源[com//configuration/mylogbatchconfiguration.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.web.client.resttemplate]:涉及包含bean的循环引用“mylogbatchconfiguration”-请考虑将工厂方法声明为静态,以独立于其包含示例。工厂方法“resttemplate”引发异常;嵌套的异常是org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredFeldElement.inject(autowiredannotationbeanpostprocessor)的java.lang.nullpointerexception。java:643)位于org.springframework.beans.factory.annotation.injectionmetadata.injector(injectionmetadata)。java:130)在org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocessproperties(autowiredannotationbeanpostprocessor)。java:399)位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory)。java:1420)在org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory)。java:593)位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory)。java:516)在org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory)。java:324)]在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:498)在org.springframework.boot.loader.mainmethodrunner.run(mainmethodrunner。java:49)在org.springframework.boot.loader.launcher.launcher(launcher。java:107)在org.springframework.boot.loader.launcher.launch(launcher。java:58)在org.springframework.boot.loader.jarlauncher.main(jarlauncher。java:88)原因:org.springframework.beans.factory.unsatifieddependencyException:创建名为“batchconfiguration”的bean时出错:未满足通过字段“myrestemplate”表示的依赖关系;嵌套异常为org.springframework.beans.factory.beancreationexception:创建名为“restemplate”的bean时出错,该bean在类路径资源[com//configuration/mylogbatchconfiguration.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.web.client.resttemplate]:涉及包含bean的循环引用“mylogbatchconfiguration”-请考虑将工厂方法声明为静态,以独立于其包含示例。工厂方法“resttemplate”引发异常;嵌套的异常是org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredFeldElement.inject(autowiredannotationbeanpostprocessor)的java.lang.nullpointerexception。java:643)位于org.springframework.beans.factory.annotation.injectionmetadata.injector(injectionmetadata)。java:130)在org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocessproperties(autowiredannotationbeanpostprocessor)。java:399)位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory)。java:1420)在org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory)。java:322)在org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory。java:202)在org.springframework.beans.factory.config.dependencydescriptor.resolvecandidate(dependencydescriptor。java:276)在org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory)。java:1307)位于org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory)。java:1227)在org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredFeldElement.inject(autowiredannotationbeanpostprocessor)。java:640) ... 28由于以下原因而忽略的公共帧:org.springframework.beans.factory.beancreationexception:创建名为“restemplate”的bean时出错,该bean在类路径资源[com/*/configuration/mylogbatchconfiguration.class]中定义:通过工厂方法示例化bean失败;嵌套异常为org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.web.client.resttemplate]:涉及包含bean的循环引用“mylogbatchconfiguration”-请考虑将工厂方法声明为静态,以独立于其包含示例。工厂方法“resttemplate”引发异常;嵌套的异常是java.lang.nullpointerexception,位于org.springframework.beans.factory.support.constructorresolver.instantiate(constructorresolver)。java:655)在org.springframework.beans.factory.support.constructorresolver.instantialEusingFactoryMethod(constructorresolver。java:635)在org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.instanceUsingFactoryMethod(abstractautowirecapablebeanfactory)。java:1336)位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbeaninstance(abstractautowirecapablebeanfactory)。java:1176)在org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory)。java:556)位于org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory)。java:516)在org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory)。java:1307)位于org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory)。java:1227)在org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredFeldElement.inject(autowiredannotationbeanpostprocessor)。java:640) ... 50由于以下原因而忽略的公共框架:org.springframework.beans.beaninstantiationexception:未能示例化[org.springframework.web.client.resttemplate]:涉及包含bean的循环引用“mylogbatchconfiguration”-考虑将工厂方法声明为静态,以独立于其包含示例。工厂方法“resttemplate”引发异常;嵌套的异常是java.lang.nullpointerexception,位于org.springframework.beans.factory.support.simpleinstationstrategy.instantiate(simpleinstationstrategy)。java:185)在org.springframework.beans.factory.support.constructorresolver.instantiate(constructorresolver。java:650) ... 63由于java.lang.nullpointerexception:null在org.springframework.util.mimetype.(mimetype。java:143)在org.springframework.http.mediatype。java:433)
我省略了一些堆栈之间的跟踪,以保持重要的行在1.5.6.release版本中正常工作。我在这里看不到任何循环依赖关系。resttemplate函数也不依赖于mylogbatchconfiguration。我还试图改变顺序,将myrestemplatebean放在createsessionfactory bean之后,但仍然只有restemplate调用失败,而不是other。似乎other创建成功了。为什么要升级?任何帮助都将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题