java将MongoTemplate传递给自定义存储库实现
项目配置为使用多个MongoTemplates
Mongo Ref被传递为
@EnableMongoRepositories(basePackages={"com.mypackage.one"}, mongoTemplateRef="mongoTemplateOne")
对于包中的存储库com.mypackage.one
及
@EnableMongoRepositories(basePackages={"com.mypackage.two"}, mongoTemplateRef="mongoTemplateTwo")
对于包中的存储库com.mypackage.two
对于标准存储库,它可以正常工作。但对于需要自定义行为的场景,我用自定义行为需求定义saymyrepocustompl
问题:我需要访问类似标准存储库中的MongoTemplate
例如。
如果MyRepo
将MyRepoCustom
接口扩展为
@Repository
interface MyRepo extends MongoRepository<MyEntity, String>, MyRepoCustom{}
MyRepoCustomImpl
@Service
public class MyRepoCustomImpl implements MyRepoCustom{
@Autowired
@Qualifier("mongoTemplateOne")
MongoTemplate mongoTmpl;
@Override
MyEntity myCustomNeedFunc(String arg){
// MyImplemenation goes here
}
}
如果MyRepo在com.mypackage.one
包中,那么mongoTemplateOne
将由MyRepo使用,因此应该有一种方法来实现MyreposCustomImpl,当我更改MyRepo
的mongoTemplateRef
时,它也应该使用mongoTemplateOne,比如
@EnableMongoRepositories(basePackages={"com.mypackage.one"}, mongoTemplateRef="mongoTemplateThree")
现在我需要在^{
问题:相反,是否有任何方法可以根据MongoTemplate扩展到的回购协议自动注入或解决要使用的MongoTemplate
# 1 楼答案
MongoTemplate
未被MongoRepository
接口公开。它们可能会公开MongoTemplate
{First off
mongoTemplateRef
指要使用的@Bean
的名称,它不指定MongoTemplate
的名称您需要提供每个},然后在
MongoTemplate
{@EnableMongoRepositories
注释中引用它因为您使用的是spring boot,所以可以利用
MongoDataAutoConfiguration
类。请看一下它在这里的作用最简单的例子就是这样
软件包:com。xyz。repo(这个实现依赖于
MongoDataAutoConfiguration
提供的配置)软件包:com。abc。回购协议
com。xyz。回购协议将依赖于
application.properties
内的spring.data.mongodb
资产 com。abc。回购协议将依赖于application.properties
内的spring.data.mongodb2
资产我还没用过AbcRepoConfiguration。以前的模板命名方法,但它是在我的IDE中编译的
如果你需要任何澄清,请告诉我