此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Data Cassandra 5.0.4spring-doc.cadn.net.cn

快速开始

Spring Data for Apache Cassandra 需要 Apache Cassandra 2.1 或更高版本,以及 Datastax Java Driver 4.0 或更高版本。 快速设置并引导一个可运行环境的简便方法是在 Spring Tools 中创建一个基于 Spring 的项目,或使用 start.spring.iospring-doc.cadn.net.cn

示例仓库

为了了解该库的工作原理,您可以下载并试用几个示例spring-doc.cadn.net.cn

你好,世界

首先,你需要设置一个正在运行的 Apache Cassandra 服务器。 请参阅 Apache Cassandra 快速入门指南 了解如何启动 Apache Cassandra。 安装完成后,通常只需执行以下命令即可启动 Cassandra:CASSANDRA_HOME/bin/cassandra -fspring-doc.cadn.net.cn

要在 STS 中创建一个 Spring 项目,请依次选择 File(文件)→ New(新建)→ Spring Template Project(Spring 模板项目)→ Simple Spring Utility Project(简单的 Spring 工具项目),并在提示时点击 Yes(是)。 然后输入项目名称和包名,例如 org.spring.data.cassandra.examplespring-doc.cadn.net.cn

然后,您可以将以下依赖声明添加到您 pom.xml 文件的 dependencies 部分。spring-doc.cadn.net.cn

<dependencies>

  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-cassandra</artifactId>
    <version>5.1.0-M2</version>
  </dependency>

</dependencies>

此外,您还应将 pom.xml 文件中的 Spring 版本修改如下:spring-doc.cadn.net.cn

<spring.version>7.0.6</spring.version>

如果使用的是里程碑版本(milestone release)而非正式发布版本(GA release),您还需要在 Maven 的 pom.xml 文件中添加 Spring 里程碑仓库的位置,使其与您的 <dependencies/> 元素处于同一层级,如下所示:spring-doc.cadn.net.cn

<repositories>
  <repository>
    <id>spring-milestone</id>
    <name>Spring Maven MILESTONE Repository</name>
    <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>

您也可以在此浏览所有 Spring 仓库。spring-doc.cadn.net.cn

现在,您可以创建一个简单的 Java 应用程序,用于将领域对象存储到 Cassandra 并从中读取。spring-doc.cadn.net.cn

为此,首先创建一个简单的领域对象类用于持久化,如下例所示:spring-doc.cadn.net.cn

import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;

@Table
public class Person {

	@PrimaryKey private final String id;

	private final String name;
	private final int age;

	public Person(String id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public String getId() {
		return id;
	}

	private String getName() {
		return name;
	}

	private int getAge() {
		return age;
	}

	@Override
	public String toString() {
		return String.format("{ @type = %1$s, id = %2$s, name = %3$s, age = %4$d }", getClass().getName(), getId(),
				getName(), getAge());
	}
}

接下来,创建要运行的主应用程序,如下例所示:spring-doc.cadn.net.cn

import java.util.UUID;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;

import com.datastax.oss.driver.api.core.CqlSession;

public class CassandraApplication {

	private static final Log LOG = LogFactory.getLog(CassandraApplication.class);

	private static Person newPerson(String name, int age) {
		return new Person(UUID.randomUUID().toString(), name, age);
	}

	public static void main(String[] args) {

		CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();

		CassandraOperations template = new CassandraTemplate(cqlSession);

		Person jonDoe = template.insert(newPerson("Jon Doe", 40));

		LOG.info(template.selectOne(Query.query(Criteria.where("id").is(jonDoe.getId())), Person.class).getId());

		template.truncate(Person.class);
		cqlSession.close();
	}

}
import reactor.core.publisher.Mono;

import java.util.UUID;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.cassandra.core.ReactiveCassandraOperations;
import org.springframework.data.cassandra.core.ReactiveCassandraTemplate;
import org.springframework.data.cassandra.core.cql.session.DefaultBridgedReactiveSession;
import org.springframework.data.cassandra.core.query.Criteria;
import org.springframework.data.cassandra.core.query.Query;

import com.datastax.oss.driver.api.core.CqlSession;

public class ReactiveCassandraApplication {

	private static final Log LOG = LogFactory.getLog(ReactiveCassandraApplication.class);

	private static Person newPerson(String name, int age) {
		return new Person(UUID.randomUUID().toString(), name, age);
	}

	public static void main(String[] args) {

		CqlSession cqlSession = CqlSession.builder().withKeyspace("mykeyspace").build();

		 ReactiveCassandraOperations template = new ReactiveCassandraTemplate(new DefaultBridgedReactiveSession(cqlSession));

    Mono<Person> jonDoe = template.insert(newPerson("Jon Doe", 40));

    jonDoe.flatMap(it -> template.selectOne(Query.query(Criteria.where("id").is(it.getId())), Person.class))
				.doOnNext(it -> LOG.info(it.toString()))
        .then(template.truncate(Person.class))
        .block();

		cqlSession.close();
	}

}

即使在这个简单的示例中,也有几点值得注意的地方:spring-doc.cadn.net.cn