cassandra
如果您想通过Spring Boot开始使用Cassandra NoSQL数据库,最好的资源可能是此处提供的Cassandra示例以及Spring数据Cassandra文档 。
通过实际在本地安装Cassandra并对其进行基本测试,我将采取一些绕过的方式,我的目标是在下一篇博客文章中将此示例开发为更全面的示例。
设置本地Cassandra实例
您的工作量可能会有所不同,但是要在本地安装Cassandra的最简单方法是使用此处提供的Cassandra集群管理器(ccm)实用程序。
ccm create test -v 2.2.5 -n 3 -s
或更传统的方法可能只是从Apache站点下载它。 如果您一直沿用,最适合我的Cassandra版本是2.2.5。
通过以上两种方法之一,使用ccm启动Cassandra:
ccm start test
或从Apache站点下载:
bin/cassandra -f
-f标志将使进程保持在前台,一旦完成样本,以这种方式停止进程将非常容易。
现在连接到此Cassandra实例:
bin/cqlsh
并创建一个示例Cassandra键空间:
CREATE KEYSPACE IF NOT EXISTS sample WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};
使用Spring Boot Cassandra
与Spring Boot相关的任何事情,都有一个启动器可用于拉入Cassandra的所有相关依赖关系,在此处指定为gradle依赖关系:
compile('org.springframework.boot:spring-boot-starter-data-cassandra')
这将拉入触发与Cassandra相关的实例自动配置的依赖关系-主要是一个Cassandra会话 。
对于示例,我定义了一个名为Hotel的实体,它通过以下方式定义:
package cass.domain;import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;import java.io.Serializable;
import java.util.UUID;@Table("hotels")
public class Hotel implements Serializable {private static final long serialVersionUID = 1L;@PrimaryKeyprivate UUID id;private String name;private String address;private String zip;private Integer version;public Hotel() {}public Hotel(String name) {this.name = name;}public UUID getId() {return id;}public String getName() {return this.name;}public String getAddress() {return this.address;}public String getZip() {return this.zip;}public void setId(UUID id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAddress(String address) {this.address = address;}public void setZip(String zip) {this.zip = zip;}public Integer getVersion() {return version;}public void setVersion(Integer version) {this.version = version;}}
和Spring数据存储库来管理该实体:
import cass.domain.Hotel;
import org.springframework.data.repository.CrudRepository;import java.util.UUID;public interface HotelRepository extends CrudRepository<Hotel, UUID>{}
需要一个相应的cql表来保存此实体:
CREATE TABLE IF NOT EXISTS sample.hotels (id UUID,name varchar,address varchar,zip varchar,version int,primary key((id))
);
本质上就是这样,对Cassandra的Spring数据支持现在将管理该实体的所有CRUD操作,并且测试如下所示:
import cass.domain.Hotel;
import cass.repository.HotelRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.UUID;import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SampleCassandraApplication.class)
public class SampleCassandraApplicationTest {@Autowiredprivate HotelRepository hotelRepository;@Testpublic void repositoryCrudOperations() {Hotel sample = sampleHotel();this.hotelRepository.save(sample);Hotel savedHotel = this.hotelRepository.findOne(sample.getId());assertThat(savedHotel.getName(), equalTo("Sample Hotel"));this.hotelRepository.delete(savedHotel);}private Hotel sampleHotel() {Hotel hotel = new Hotel();hotel.setId(UUID.randomUUID());hotel.setName("Sample Hotel");hotel.setAddress("Sample Address");hotel.setZip("8764");return hotel;}}
这是此示例的github回购。 这个示例还没有太多,在下一篇博客文章中,我将对该示例进行增强,以说明以下事实:了解NoSQL系统中整个集群中的数据分布以及此处的Hotel这样的实体如何能够非常重要。为有效的CRUD操作建模。
翻译自: https://www.javacodegeeks.com/2016/04/first-steps-spring-boot-cassandra.html
cassandra