【发布时间】:2015-06-03 13:23:15
【问题描述】:
在我的环境中运行基于 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 自动装配以某种方式混淆,并尝试以错误的顺序执行操作,从而在尝试设置存储库时为空?
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;
【问题讨论】:
-
很遗憾 Spring 错误说“创建名称为 'yourField' 的 bean 时出错”,但没有列出包含该字段的类。当然,“创建 bean YourClass.yourField 时出错”是可能的,而且更有帮助。在许多情况下,相同的字段名称“yourField”可能会在代码中出现多次;哪一个?
-
能否添加完整的堆栈跟踪 + flyway bean-config + 数据源 bean-config(包括使用的
@Profiles 或@Conditionals)? -
什么类实现了 ContentItemRepository?
-
这里还不够全面……您能像 Jimmy T. 所问的那样发布您的 ContentItemRepository 实现吗?另外,你能把你担心的飞路豆贴出来吗? 最后请求,我保证:我们也能获得更多的日志吗?只需将它们梳理为“存储库”;我感觉您的存储库可能创建失败,日志可能会显示原因。
标签: java spring dependency-injection spring-data