带有 Spring-boot XML 配置的 Couchbase 5.0

Posted

技术标签:

【中文标题】带有 Spring-boot XML 配置的 Couchbase 5.0【英文标题】:Couchbase 5.0 with Spring-boot XML configuration 【发布时间】:2018-07-16 05:54:02 【问题描述】:

如何使用 couchbase 5.0 进行 Spring-boot XML 配置?

全文:最近,将 couchbase 服务器从 4.0.0-4051 升级到 5.0.0 build 3519(都是社区版本) . Couchbase 4.0 是基于存储桶的授权,而 couchbase 5.0 则成为基于角色的访问控制 (RBAC)。 (用户可以访问特定的存储桶)。 我有一个 Spring-boot 应用程序,所有配置都通过 XML bean。它与 couchbase 4.0 完美配合,但是当我更改为 couchbase 5.0 时(注意所有凭据都是正确的),我收到以下错误:

原因:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“userServiceImpl”的bean时出错:通过字段“userRepo”表示的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'couchbaseRepositoryOperationsMapping' available 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ... 25 更多 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为“couchbaseRepositoryOperationsMapping”的bean可用 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ... 38 更多

我的依赖是:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.5.RELEASE</version>
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-couchbase</artifactId>
</dependency>

我可以通过手动配置couchbase客户端(我已经制作了一个示例并进行了测试)来解决这个问题。通过这个代码(如这里https://blog.couchbase.com/new-sdk-authentication/解释):

Cluster cluster = CouchbaseCluster.create(); cluster.authenticate("username", "password"); Bucket bucket = cluster.openBucket("bucket-name");

(如果此处需要来源,则为https://github.com/mashhur/twitter_blockchain)

无论如何,XML 选项将不胜感激!

【问题讨论】:

【参考方案1】:

Spring Boot 和 Spring Data 对 RBAC 的更好支持即将推出。它处于当前的里程碑中,应该很快就会发布!请参阅针对 Kay SR6 和 Lovelace M2 的 DATACOUCH-322。

另外,请注意,您可以通过简单地创建一个名称与存储桶相同的用户来使 5.0 的行为与早期版本一样。

【讨论】:

“使 5.0 的行为与早期版本一样” - 这在文档中的什么位置?你能不能给我指个方向。

以上是关于带有 Spring-boot XML 配置的 Couchbase 5.0的主要内容,如果未能解决你的问题,请参考以下文章

带有 pom.xml 和 app.java 的简单 spring-boot 应用程序显示构建失败错误

使用 web.xml 配置 spring-boot 应用程序

需要啥配置才能让带有 spring-boot 的千分尺输出 uvm_info 仪表?

如何在 web.xml 中配置 spring-boot servlet?

Spring-boot的pom.xml配置文件

spring-boot中logback日志配置