如何使用springboot-data-couchbase配置多个Couchbase数据源?

时间:2019-06-13 06:16:22

标签: java spring spring-boot spring-data-jpa spring-data-couchbase

我正在尝试使用springboot-data-couchbase配置多个couchbase数据源。

这是我尝试将两个具有两个存储库的Couchbase源附加在一起的方式。

@Configuration
@EnableCouchbaseRepositories("com.xyz.abc")
public class AbcDatasource extends AbstractCouchbaseConfiguration {
 @Override
    protected List<String> getBootstrapHosts() {
        return Collections.singletonList("ip_address_of_couchbase");
    }
   //bucket_name
    @Override
    protected String getBucketName() {
        return "bucket_name";
    }
   //password
    @Override
    protected String getBucketPassword() {
        return "user_password";
    }
@Override
@Bean(destroyMethod = "disconnect", name = "COUCHBASE_CLUSTER_2")
public Cluster couchbaseCluster() throws Exception {
    return CouchbaseCluster.create(couchbaseEnvironment(), "ip_address_of_couchbase");
}

@Bean( name = "BUCKET2")
public Bucket bucket2() throws Exception {
    return this.couchbaseCluster().openBucket("bucket2", "somepassword");

}

@Bean( name = "BUCKET2_TEMPLATE")
public CouchbaseTemplate newTemplateForBucket2() throws Exception {
    CouchbaseTemplate template = new CouchbaseTemplate(
            couchbaseClusterInfo(), //reuse the default bean
            bucket2(), //the bucket is non-default
            mappingCouchbaseConverter(), translationService() 
    );
    template.setDefaultConsistency(getDefaultConsistency());
    return template;
}

@Override
public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) {
        baseMapping 
                .mapEntity(SomeDAOUsedInSomeRepository.class, newTemplateForBucket2());
    }
}
similarly: 
@Configuration
@EnableCouchbaseRepositories("com.xyz.mln")
public class MlnDatasource extends AbstractCouchbaseConfiguration {...}

现在的问题是没有直接的方法可以通过将不同的bean附加到这些配置来指定基于名称空间的数据源,例如springdata-jpa中,因为springdata-jpa支持使用实体管理器工厂引用和事务管理器来支持此功能参考

Due to which only one configuration is being picked whoever comes first.

Any suggestion is greatly appreciated.

相关问题:Use Spring Data Couchbase to connect to different Couchbase clusters

1 个答案:

答案 0 :(得分:0)

@anshul,您快到了。 将数据源之一设置为@primary,默认情况下将使用它作为存储桶。

您想使用其他存储桶的地方。仅在服务类中使用特定的Bean,并使用以下限定符即可:

@Qualifier(value = "BUCKET1_TEMPLATE")
@Autowired
CouchbaseTemplate couchbaseTemplate;

现在,您可以使用此模板在所需的存储桶上执行所有与沙发相关的操作。