将MongoTemplate传递给Custom Repository实现

Mr.*_*jun 7 java spring spring-data spring-data-mongodb spring-boot

项目被配置为使用多个MongoTemplate小号

Mongo Ref被传递为

@EnableMongoRepositories(basePackages={"com.mypackage.one"}, mongoTemplateRef="mongoTemplateOne")
Run Code Online (Sandbox Code Playgroud)

对于包中的存储库 com.mypackage.one

@EnableMongoRepositories(basePackages={"com.mypackage.two"}, mongoTemplateRef="mongoTemplateTwo")
Run Code Online (Sandbox Code Playgroud)

对于包中的存储库 com.mypackage.two

对于标准存储库,它工作正常.但对于我需要自定义行为的场景,我定义了myRepoCustomImpl以及我的自定义行为需求.

问题:我需要访问类似标准存储库的MongoTemplate.

例如,如果MyRepoMyRepoCustom接口扩展为

@Repository
interface MyRepo extends MongoRepository<MyEntity, String>, MyRepoCustom{}
Run Code Online (Sandbox Code Playgroud)

MyRepoCustomImpl

@Service
    public class MyRepoCustomImpl implements MyRepoCustom{
        @Autowired
        @Qualifier("mongoTemplateOne")
        MongoTemplate mongoTmpl;

        @Override
        MyEntity myCustomNeedFunc(String arg){
            // MyImplemenation goes here
        }

}
Run Code Online (Sandbox Code Playgroud)

如果MyRepo在包中com.mypackage.one,myRepomongoTemplateOne将使用它,所以应该有一些方法让MyRepoCustomImpl知道它也应该使用mongoTemplateOne,每当我在mongoTemplateReffor中进行更改时MyRepo,比如说

@EnableMongoRepositories(basePackages={"com.mypackage.one"}, mongoTemplateRef="mongoTemplateThree")
Run Code Online (Sandbox Code Playgroud)

现在我需要对@Qualifier进行更改MyRepoCustomImpl!自定义行为有很多回购,因此它变得繁琐乏味.

问题:相反,没有任何方法可以根据它扩展到的回购自动注入或解决使用的MongoTemplate?

Sha*_*Jan -1

您可以直接在服务类中注入 MongoTemplate 和 MongoOperations。

尝试自动连接它们,然后你应该就可以了。

更新:

如果没有使用适当的限定符进行自动装配(因为您有两个存储库),这是不可能的。作为自定义类,所有这些都与存储库不同。如果您只有一个存储库,那么 mongotemplate 的自动装配就足够了,否则您必须在 impl 中提供限定符,因为创建了两个 MongoTempalte bean。