Spring引导和Spring数据Couchbase N1QL自动生成查询

Spring引导和Spring数据Couchbase N1QL自动生成查询,spring,spring-boot,spring-data,couchbase,spring-data-couchbase,Spring,Spring Boot,Spring Data,Couchbase,Spring Data Couchbase,我正在尝试使用SpringBoot和SpringDataCouchbase项目创建一个简单的原型。到目前为止,我一直在尝试使用Spring数据的查询派生机制从方法名构建N1QL查询,这让我很为难 这就是我的存储库接口定义,问题在于findBy。。。线路 public interface MetricsRepository extends CrudRepository<Single, String> { Single save(Single entity); Singl

我正在尝试使用SpringBoot和SpringDataCouchbase项目创建一个简单的原型。到目前为止,我一直在尝试使用Spring数据的查询派生机制从方法名构建N1QL查询,这让我很为难

这就是我的存储库接口定义,问题在于findBy。。。线路

public interface MetricsRepository extends CrudRepository<Single, String> {
    Single save(Single entity);
    Single findOne(String id);
    List<Single> findByServiceID(long serviceId);
}
我通过REST控制器中的@Autowired注释使用存储库。 我将@Configuration和@EnableCouchbaseRepositories配置类@Import导入到@springboot应用程序中。我的测试实例上安装了Couchbase Server 4.0.0社区版本,如果n1ql查询不存在,我可以连接、存储和检索实体

我在gradle的依赖关系:

dependencies {
    compile("org.springframework.data:spring-data-couchbase:2.1.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-actuator")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("junit:junit")
}

SpringDataCouchbase 2.1.1也有同样的问题(java.lang.AbstractMethodError)。但在本例中,我在项目中使用了其他依赖项,使用了不同的SpringCommons必需版本,它们之间存在冲突。尝试使用不同的版本,可能是2.1.0。

因此我做了一些依赖性检测工作:

  • 弹簧靴1.3.3是指版本
    1.7.4
    中的弹簧数据BOM表(
    Gosling SR4
  • 该版本的Spring数据BOM引入了。除非你像你那样强制版本,否则你会得到这样的结果
  • 但问题的根源是它也带来了问题(当然,因为BOM是用来捆绑一组连贯的版本的)
因此,您最终只能强制使用Spring数据Couchbase依赖项的版本,同时依赖BOM选择Spring数据公用项,从而导致不兼容的工件

这里有一个坏消息:如果您想要SpringDataCouchbase 2.x(新一代),它只在
SpringDataHopper
中得到官方支持。而
Hopper
仅在
Spring Boot 1.4.0
中得到官方支持,该版本目前处于里程碑2

如果您只想开始使用SpringDataCouchbase 2.x,那么使用SpringBoot 1.4.0.M2是否可以接受

如果你真的不在乎2.x版本,你只需要在Gradle配置中删除这个版本,它就可以工作了

危险区域:如果您确实想在Spring Boot 1.3.3中执行Spring Data Couchbase 2.1.1,请注意,如果依赖项发生冲突,任何东西都可能中断。也就是说,如果你只使用Couchbase数据库,也许你会没事。Gradle的方法很复杂,因为您需要一个插件来导入BOM表。看一看


我已经更新了项目站点,注意到BOM通常比强制版本更受欢迎。这里的快速启动是针对独立项目的。

AbstractMethodError
表示类路径上有不兼容的JAR。为什么要强制使用
数据库的版本?您正在运行哪个版本的引导?我强制使用couchbase版本,因为这是最新版本,这是
data couchbase
project quick start页面上给出依赖关系的方式。spring引导版本是1.3.3.0版本
import com.couchbase.client.java.repository.annotation.Id;
import com.couchbase.client.java.repository.annotation.Field;
import org.springframework.data.couchbase.core.mapping.Document;

@Document
public class Single {
    @Id private final String eventID;
    @Field private final long serviceID;
    @Field private final long metric;
    @Field private final long timestamp;
    @Field private final long previous;

     public Single(String eventID, long serviceID, long metric, long timestamp, long previous) {
        this.eventID = eventID;
        this.serviceID = serviceID;
        this.metric = metric;
        this.timestamp = timestamp;
        this.previous = previous;
     }

    public String getEventID() { return eventID; }
    public long getServiceID() { return serviceID; }
    public long getMetric() { return metric; }
    public long getTimestamp() { return timestamp; }
    public long getPrevious() { return previous; }
}
dependencies {
    compile("org.springframework.data:spring-data-couchbase:2.1.1.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-actuator")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    testCompile("junit:junit")
}