gpt4 book ai didi

java - 为什么 Spring 在一台机器上而不是另一台机器上出现循环依赖问题?

转载 作者:IT老高 更新时间:2023-10-28 13:46:34 41 4
gpt4 key购买 nike

在我的环境中运行基于 Spring Data 的应用程序时遇到问题。我正在运行 Debian,但我的同事使用的是 Mac 或 Ubuntu。我的环境变量中没有任何特殊设置,并且使用的 Java 版本与其他版本完全相同。

我在日志中看到了这个,提示是循环引用问题导致实例化失败:

nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'flyway.CONFIGURATION_PROPERTIES':
Initialization of bean failed;
...
nested exception is
org.springframework.beans.factory.BeanCurrentlyInCreationException:
Error creating bean with name 'flyway': Requested bean is currently in
creation: Is there an unresolvable circular reference?

所以问题似乎是flyway需要一些依赖,他们需要flyway。

问题是,为什么这只发生在我的环境而不是其他任何人?即使在内存中使用 H2 的测试中,我也看到了问题,所以不是我的数据库有问题。

是否可能是 Spring Autowiring 以某种方式混淆,并尝试以错误的顺序执行操作,以致存储库在尝试设置时为空?

Spring 是否有一个糟糕的拓扑排序来排序依赖项?

为什么它会在我的环境中出现异常?

类路径的顺序会影响其行为吗?

=======================

应用程序将无法启动并出现此错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contentItemRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Repository interface must not be null on initialization!
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:175)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:127)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1517)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127)

=============================

ContentItemRepository 签名是:

@Repository
@Transactional
public interface ContentItemRepository extends JpaRepository<ContentItem, String>, JpaSpecificationExecutor<ContentItem> {

=============================

这曾经对我有用,我能够通过遍历所有提交、执行 mvn clean install 并尝试启动服务器来识别破坏构建的提交,直到找到破坏它的增量.

不能为空的'contentItemRepository'就是这个:

@Component
+public class UrlAliasRequestConverter implements Mapper<UrlAliasRequest, UrlAlias> {
+
+ /**
+ * The content item contentItemType repository.
+ */
+ @Autowired
+ private ContentItemRepository contentItemRepository;

最佳答案

我在 Ubuntu 16.04 上遇到了同样的问题。

我发现问题与

@ComponentScan(basePackages = "com.my.app")

代码正在运行至少 5 台不同的机器(windows、ubuntu 15.04 和 ubuntu 16.04 桌面),但没有启动我们的 CI 服务器(ubuntu 16.04 服务器)。

我改变之后

@ComponentScan(basePackages = "com.my.app")

@ComponentScan(basePackages = {"com.my.app.service", "com.my.app.config", "com.my.app"})

代码也在 CI 服务器上运行。

我认为这是 bean 加载器的 Spring 问题...

更新:

https://github.com/spring-projects/spring-boot/issues/6045

https://jira.spring.io/browse/SPR-14307

关于java - 为什么 Spring 在一台机器上而不是另一台机器上出现循环依赖问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347723/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com