共计 8181 个字符,预计需要花费 21 分钟才能阅读完成。
介绍
参考文档的这一部分解释了 Spring Data 为 Apache Cassandra 提供的外围性能。
Cassandra 反对介绍了 Cassandra 模块功能集。
反应式 Cassandra 反对解释了反应式 Cassandra 的细节。
Cassandra Repositories 引入了对 Cassandra 的存储库反对。
8.1.Apache Cassandra 模块的 Spring CQL 和 Spring Data
Spring Data for Apache Cassandra 容许在 CQL 和实体级别进行交互。
Spring Data 为 Apache Cassandra 形象提供的值可能最好通过下表中列出的操作序列来展现。该表显示了 Spring 负责哪些操作以及哪些操作是您(应用程序开发人员)的责任。
Spring 认证中国教育管理中心 -Apache Cassandra 的 Spring 数据
外围 CQL 反对负责解决所有低级细节,这些细节能够使 Cassandra 和 CQL 成为开发时如此乏味的 API。应用映射实体对象容许模式生成、对象映射和存储库反对。
8.1.1. 为 Cassandra 数据库拜访抉择一种办法
您能够从多种办法中进行抉择,以用作 Cassandra 数据库拜访的根底。Spring 对 Apache Cassandra 的反对有多种形式。一旦开始应用其中一种办法,您依然能够混合搭配以蕴含来自不同办法的性能。以下办法成果很好:
CqlTemplate 并且 ReactiveCqlTemplate 是经典的 Spring CQL 办法,也是最受欢迎的办法。这是“最低级别”的办法。请留神这样的组件 CassandraTemplate 应用 CqlTemplate 在引擎罩。
CassandraTemplate 包装了一个 CqlTemplate 提供查问后果到对象映射和应用 SELECT,INSERT,UPDATE,和 DELETE 办法,而不是写 CQL 语句。这种办法提供了更好的文档和易用性。
ReactiveCassandraTemplate 包装了一个 ReactiveCqlTemplate 提供查问后果到对象映射和应用 SELECT,INSERT,UPDATE,和 DELETE 办法,而不是写 CQL 语句。这种办法提供了更好的文档和易用性。
Repository Abstraction 容许您在数据拜访层中创立存储库申明。Spring Data 的存储库形象的指标是显着缩小为各种持久性存储实现数据拜访层所需的样板代码量。
- 卡桑德拉反对
Spring Data 对 Apache Cassandra 的反对蕴含宽泛的个性:
Spring 配置反对基于 Java 的 @Configuration 类或 XML 命名空间。
CqlTemplate 通过正确处理常见的 Cassandra 数据拜访操作来进步生产力的助手类。
CassandraTemplate 提供 CQL 表和 POJO 之间的对象映射的帮忙器类。
异样转换为 Spring 的可移植数据拜访异样层次结构。
与 Spring 的 转换服务集成的功能丰富的对象映射。
基于正文的映射元数据可扩大以反对其余元数据格式。
基于 Java 的查问、条件和更新 DSL。
Repository 接口的主动实现,包含对自定义查找器办法的反对。
对于大多数面向数据的工作,您能够应用 CassandraTemplate 或 Repository 反对,两者都应用丰盛的对象映射性能。CqlTemplate 通常用于减少计数器或执行长期 CRUD 操作。CqlTemplate 还提供了回调办法,能够轻松获取低级 API 对象,例如
com.datastax.oss.driver.api.core.CqlSession,能够让您间接与 Cassandra 通信。Spring Data for Apache Cassandra 对各种 API 中的对象应用与 DataStax Java 驱动程序中的对象统一的命名约定,以便它们相熟,并且您能够将现有常识映射到 Spring API。
9.1. 入门
Spring Data for Apache Cassandra 须要 Apache Cassandra 2.1 或更高版本以及 Datastax Java Driver 4.0 或更高版本。疾速设置和疏导工作环境的一种简略办法是在 STS 中创立基于 Spring 的我的项目或应用 Spring Initializer。
首先,您须要设置一个正在运行的 Apache Cassandra 服务器。无关 如何启动 Apache Cassandra 的阐明,请参阅 Apache Cassandra 疾速入门指南。一旦装置后,开始 Cassandra 是典型地执行以下命令的问题:
CASSANDRA_HOME/bin/cassandra -f。
要在 STS 中创立 Spring 我的项目,请转到 File → New → Spring Template Project → Simple Spring Utility Project,而后在呈现提醒时按 Yes。而后输出我的项目和包名称,例如
org.spring.data.cassandra.example.
而后,您能够将以下依赖项申明增加到 pom.xml 文件的 dependencies 局部。
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
此外,您应该将 pom.xml 文件中的 Spring 版本更改为如下:
<spring.framework.version>5.3.13</spring.framework.version>
如果应用里程碑版本而不是 GA 版本,您还须要将 Maven 的 Spring Milestone 存储库的地位增加到您的 pom.xml 文件中,使其与您的 <dependencies/> 元素处于同一级别,如下所示:
<repositories>
<repository>
<id>spring-milestone</id>
<name>Spring Maven MILESTONE Repository</name>
<url>https://repo.spring.io/libs-milestone</url>
</repository>
</repositories>
存储库也可在此处浏览。
您还能够在此处浏览所有 Spring 存储库。
当初您能够创立一个简略的 Java 应用程序,该应用程序在 Cassandra 中存储和读取域对象。
为此,首先创立一个简略的域对象类来长久化,如以下示例所示:
package org.springframework.data.cassandra.example;
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 认证中国教育管理中心 -Apache Cassandra 的 Spring 数据
接下来,创立要运行的主应用程序,如以下示例所示:
package org.springframework.data.cassandra.example;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 Logger LOGGER = LoggerFactory.getLogger(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));
LOGGER.info(template.selectOne(Query.query(Criteria.where("id").is(jonDoe.getId())), Person.class).getId());
template.truncate(Person.class);
cqlSession.close();
}
}
Spring 认证中国教育管理中心 -Apache Cassandra 的 Spring 数据
即便在这个简略的例子中,也有一些值得注意的中央须要指出:
您能够 CassandraTemplate 应用 Cassandra 创立一个实例 CqlSession。
您必须将您的 POJO 正文为 Cassandra@Table 实体,并正文 @PrimaryKey. 或者,您能够笼罩这些映射名称以匹配您的 Cassandra 数据库表和列名称。
您能够应用原始 CQL 或 DataStax QueryBuilderAPI 来构建您的查问。
9.2. 示例库
要理解库的工作原理,您能够下载并试用 几个示例。.
9.3. 应用 Spring 连贯到 Cassandra
在 Spring 中应用 Apache Cassandra 时的首要任务之一是
com.datastax.oss.driver.api.core.CqlSession 应用 Spring IoC 容器创建对象。您能够通过应用基于 Java 的 bean 元数据或应用基于 XML 的 bean 元数据来实现。这些将在以下各节中探讨。
对于那些不相熟如何配置应用基于 Java bean 的元数据,而不是基于 XML 的元数据 Spring 容器,请参阅参考文档的高级介绍 这里 还有具体的文档在这里。
9.3.1. 应用基于 Java 的元数据注册会话实例
以下示例显示了如何应用基于 Java 的 bean 元数据来注册 a 的实例
com.datastax.oss.driver.api.core.CqlSession:
示例
54.com.datastax.oss.driver.api.core.CqlSession 应用基于 Java 的 bean 元数据注册对象
@Configuration
public class AppConfig {
/*
- Use the standard Cassandra driver API to create a com.datastax.oss.driver.api.core.CqlSession instance.
*/
public @Bean CqlSession session() {
return CqlSession.builder().withKeyspace("mykeyspace").build();
}
}
这种办法让您能够应用
com.datastax.oss.driver.api.core.CqlSession 您可能曾经晓得的规范 API。
另一种办法是
com.datastax.oss.driver.api.core.CqlSession 应用 Spring 的 CqlSessionFactoryBean. 与 com.datastax.oss.driver.api.core.CqlSession 间接实例化实例相比,该 FactoryBean 办法还有一个额定的劣势,即还为容器提供了一个 ExceptionTranslator 实现,将 Cassandra 异样转换为 Spring 可移植 DataAccessException 层次结构中的异样。Spring 的 DAO 反对个性中 @Repository 形容了这种层次结构和应用。
以下示例显示了基于 Java 的工厂类用法:
示例 55. 应用 Spring 的注册
com.datastax.oss.driver.api.core.CqlSession 对象 CqlSessionFactoryBean:
@Configuration
public class FactoryBeanAppConfig {
/*
- Factory bean that creates the com.datastax.oss.driver.api.core.CqlSession instance
*/
@Bean
public CqlSessionFactoryBean session() {
CqlSessionFactoryBean session = new CqlSessionFactoryBean();
session.setContactPoints("localhost");
session.setKeyspaceName("mykeyspace");
return session;
}
}
应用 CassandraTemplate 与对象映射和存储库反对须要 CassandraTemplate,CassandraMappingContext,CassandraConverter,和使储存库反对。
以下示例显示了如何注册组件以配置对象映射和存储库反对:
示例 56. 注册组件以配置对象映射和存储库反对
@Configuration
@EnableCassandraRepositories(basePackages = { “org.springframework.data.cassandra.example”})
public class CassandraConfig {
@Bean
public CqlSessionFactoryBean session() {
CqlSessionFactoryBean session = new CqlSessionFactoryBean();
session.setContactPoints("localhost");
session.setKeyspaceName("mykeyspace");
return session;
}
@Bean
public SessionFactoryFactoryBean sessionFactory(CqlSession session, CassandraConverter converter) {
SessionFactoryFactoryBean sessionFactory = new SessionFactoryFactoryBean();
sessionFactory.setSession(session);
sessionFactory.setConverter(converter);
sessionFactory.setSchemaAction(SchemaAction.NONE);
return sessionFactory;
}
@Bean
public CassandraMappingContext mappingContext(CqlSession cqlSession) {
CassandraMappingContext mappingContext = new CassandraMappingContext();
mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cqlSession));
return mappingContext;
}
@Bean
public CassandraConverter converter(CassandraMappingContext mappingContext) {
return new MappingCassandraConverter(mappingContext);
}
@Bean
public CassandraOperations cassandraTemplate(SessionFactory sessionFactory, CassandraConverter converter) {
return new CassandraTemplate(sessionFactory, converter);
}
}
Spring 认证中国教育管理中心 -Apache Cassandra 的 Spring 数据
创立为 Apache Cassandra 组件注册 Spring Data 的配置类可能是一个令人精疲力竭的挑战,因而 Spring Data for Apache Cassandra 附带了一个预构建的配置反对类。从
AbstractCassandraConfiguration 用于 Apache Cassandra 的 Spring Data 注册 bean 扩大的类。AbstractCassandraConfiguration 容许您提供各种配置选项,例如初始实体、默认查问选项、池选项、套接字选项等等。AbstractCassandraConfiguration 还反对您依据初始实体(如果提供)生成模式。扩大 from AbstractCassandraConfiguration 要求您至多通过实现该 getKeyspaceName 办法提供键空间名称。以下示例显示了如何应用 注册 bean AbstractCassandraConfiguration:
示例 57. 应用以下命令为 Apache Cassandra bean 注册 Spring Data
AbstractCassandraConfiguration
@Configuration
public class CassandraConfiguration extends AbstractCassandraConfiguration {
/*
- Provide a contact point to the configuration.
*/
public String getContactPoints() {
return "localhost";
}
/*
- Provide a keyspace name to the configuration.
*/
public String getKeyspaceName() {
return "mykeyspace";
}
}