如果您想通过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;
@PrimaryKey
private 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 {
@Autowired
private HotelRepository hotelRepository;
@Test
public 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