Spring Boot集成MongoTemplate自定义Repository出现依赖不满足错误如何解决
问题根因
你的错误是Spring Data MongoDB自定义扩展Repository的命名、路径规则不匹配导致的:
Spring Data默认会自动查找和Repository接口同包下、命名为[Repository接口名] + [默认后缀Impl]的类作为自定义方法的实现,你当前的配置不符合规则,Spring无法识别到RepositoryTemplateImpl是Repository接口的自定义方法实现,因此会把distinctField当成是基于实体属性的查询方法,尝试去CustomType类中匹配对应属性,匹配失败就抛出PropertyReferenceException。
可行解决方法
方法1:遵循默认规则(推荐,无需修改全局配置)
- 将
RepositoryTemplateImpl从ServiceImpl所在包移动到和Repository、RepositoryTemplate同一个包下 - 将
RepositoryTemplateImpl重命名为RepositoryImpl,和你的Repository接口名匹配
调整后的目录结构参考:
com.organization.microservice ├── repository │ ├── Repository.java (你的基础Repository接口) │ ├── RepositoryTemplate.java (自定义方法接口) │ └── RepositoryImpl.java (原RepositoryTemplateImpl,重命名移到此处) └── service ├── Service.java └── ServiceImpl.java
方法2:自定义实现类后缀适配现有命名
如果你不想修改现有实现类的命名,可在启动类的@EnableMongoRepositories注解中指定自定义后缀:
@SpringBootApplication @EnableMongoRepositories(repositoryImplementationPostfix = "TemplateImpl") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
同时需要把RepositoryTemplateImpl移动到和Repository接口同一个包下。
额外优化建议
Repository接口上的@Repository注解可以省略,Spring Data会自动识别继承了MongoRepository系列接口的类作为Repository Bean,不会影响功能。
内容的提问来源于stack exchange,提问作者Filippo MICHELINI
相关产品推荐
相关产品推荐

