Spring引导和Spring数据Couchbase N1QL自动生成查询
我正在尝试使用SpringBoot和SpringDataCouchbase项目创建一个简单的原型。到目前为止,我一直在尝试使用Spring数据的查询派生机制从方法名构建N1QL查询,这让我很为难 这就是我的存储库接口定义,问题在于findBy。。。线路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
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是指版本
中的弹簧数据BOM表(1.7.4
)Gosling SR4
- 该版本的Spring数据BOM引入了。除非你像你那样强制版本,否则你会得到这样的结果
- 但问题的根源是它也带来了问题(当然,因为BOM是用来捆绑一组连贯的版本的)
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")
}