已关注 Spring Data MongoDB手册中,我创建了存储库和实现类。但是,当我启动我的应用程序时,spring bootstrap 失败并显示
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'mockTestRepositoryImpl' for bean class [com.foo.testapp.mongo.repository.impl.MockTestRepositoryImpl] conflicts with existing, non-compatible bean definition of same name and class [com.foo.testapp.mongo.repository.impl.MockTestRepositoryImpl]
My config and code: (groovy)
package com.foo.testapp.mongo.repository.impl
@Component
class MockTestRepositoryImpl implements MockTestRepositoryCustom {
MongoOperations mongoOperations
@Autowired
MockTestRepositoryImpl(MongoOperations mongoOperations) {
this.mongoOperations = mongoOperations
}
@Override
MockTest findAndModify(Query query, Update update, FindAndModifyOptions options) {
return mongoOperations.findAndModify(query, update, options, MockTest)
}
@Override
boolean exists(Query query) {
return mongoOperations.exists(query, MockTest)
}
}
自定义界面:
package com.foo.testapp.mongo.repository
public interface MockTestRepositoryCustom {
MockTest findAndModify(Query query, Update update, FindAndModifyOptions options)
boolean exists(Query query);
}
Spring 数据存储库:
package com.foo.testapp.mongo.repository
public interface MockTestRepository extends MongoRepository<MockTest, String>, MockTestRepositoryCustom {
List<MockTest> findByDeleted(boolean deleted);
MockTest findByIdAndDeleted(String id, boolean deleted);
@Query(value = "{ 'deleted' : ?0 }", fields = "{ 'name' : 1 }")
List<MockTest> findAllBasicInfo(boolean deleted);
}
最佳答案
问题是您用 @Component
注解了 MockTestRepositoryImpl
。
您需要完全删除@Component
(正如您在手册中看到的那样,没有这样的注释 - 但所有 Spring 功能都可以正常工作)。
关于spring data mongodb自定义接口(interface)ConflictingBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204939/