Spring认证中国教育管理中心-Apache Cassandra 的 Spring 数据教程六

简介: Spring认证中国教育管理中心-Apache Cassandra 的 Spring 数据教程六

10.3.1.使用基于 Java 的元数据注册 Session 实例
您可以使用Java 配置类来配置响应式 Cassandra 支持。CqlSession响应式Cassandra 支持改编为在异步驱动程序之上提供响应式处理模型。

反应式CqlSession的配置类似于命令式CqlSession。我们提供带有预定义默认值的支持配置类,并且只需要特定于环境的信息来为 Apache Cassandra 配置 Spring Data。反应式支持的基类是
AbstractReactiveCassandraConfiguration. 这个配置类扩展了命令式AbstractCassandraConfiguration,所以反应式支持也配置了命令式 API 支持。以下示例显示如何在配置类中注册 Apache Cassandra bean: ReactiveAppCassandraConfiguration .Registering Spring Data for Apache Cassandra beans usingAbstractReactiveCassandraConfiguration

@Configuration
public class ReactiveCassandraConfiguration extends AbstractReactiveCassandraConfiguration {

/*

  • Provide a contact point to the configuration.

*/
public String getContactPoints() {

return "localhost";

}

/*

  • Provide a keyspace name to the configuration.

*/
public String getKeyspaceName() {

return "mykeyspace";

}
}
前面示例中的配置类启用了模式管理以在启动期间创建 CQL 对象。有关更多详细信息,请参阅架构管理。

10.4.ReactiveCqlTemplate
的ReactiveCqlTemplate类是在芯CQL包的核心类。它处理资源的创建和释放。它执行核心 CQL 工作流的基本任务,例如创建和运行语句,留下应用程序代码以提供 CQL 和提取结果。该ReactiveCqlTemplate班运行CQL的查询和更新语句,并在执行迭代ResultSet情况下,返回的参数值的提取。它还捕获 CQL 异常并将它们转换为org.springframework.dao包中定义的通用的、信息更丰富的异常层次结构。

当你ReactiveCqlTemplate在你的代码中使用 时,你只需要实现回调接口,它有一个明确定义的契约。给定 a Connection,
ReactivePreparedStatementCreator回调接口使用提供的 CQL 和任何必要的参数参数创建一个准备好的语句。该RowCallbackHandler 接口从 a 的每一行中提取值ReactiveResultSet。

ReactiveCqlTemplate可以通过ReactiveSessionFactory 引用直接实例化在 DAO 实现中使用,也可以在 Spring 容器中配置并作为 bean 引用提供给 DAO。ReactiveCqlTemplate是
ReactiveCassandraTemplate.

此类发布的所有 CQL 都记录在与DEBUG模板实例的完全限定类名对应的类别下的级别(通常为ReactiveCqlTemplate,但如果您使用ReactiveCqlTemplate该类的自定义子类,则可能会有所不同)。

10.4.1.ReactiveCqlTemplate类使用示例
本节提供了一些ReactiveCqlTemplate类使用示例。这些示例并不是ReactiveCqlTemplate. 请参阅随附的 Javadocs。

查询 (SELECT) 与ReactiveCqlTemplate
以下查询获取关系中的行数:

Mono rowCount = reactiveCqlTemplate.queryForObject("SELECT COUNT(*) FROM t_actor", Integer.class);
以下查询使用绑定变量:

Mono countOfActorsNamedJoe = reactiveCqlTemplate.queryForObject(
"SELECT COUNT(*) FROM t_actor WHERE first_name = ?", Integer.class, "Joe");
以下示例查询 a String:

Mono lastName = reactiveCqlTemplate.queryForObject(
"SELECT last_name FROM t_actor WHERE id = ?",
String.class, 1212L);
以下示例查询并填充单个域对象:

Mono actor = reactiveCqlTemplate.queryForObject(
"SELECT first_name, last_name FROM t_actor WHERE id = ?",
new RowMapper() {

public Actor mapRow(Row row, int rowNum) {
  Actor actor = new Actor();
  actor.setFirstName(row.getString("first_name"));
  actor.setLastName(row.getString("last_name"));
  return actor;
}},

1212L);
以下示例查询并填充多个域对象:

Flux actors = reactiveCqlTemplate.query(
"SELECT first_name, last_name FROM t_actor",
new RowMapper() {

public Actor mapRow(Row row, int rowNum) {
  Actor actor = new Actor();
  actor.setFirstName(row.getString("first_name"));
  actor.setLastName(row.getString("last_name"));
  return actor;
}

});
如果最后两个代码片段确实存在于同一个应用程序中,那么删除两个RowMapper匿名内部类中存在的重复并将它们提取到一个类(通常是static嵌套类)中是有意义的,然后可以由 DAO 方法引用如所须。

例如,将最后一个代码片段编写如下可能会更好:

Flux findAllActors() {
return reactiveCqlTemplate.query("SELECT first_name, last_name FROM t_actor", ActorMapper.INSTANCE);
}

enum ActorMapper implements RowMapper {

INSTANCE;

public Actor mapRow(Row row, int rowNum) {

Actor actor = new Actor();
actor.setFirstName(row.getString("first_name"));
actor.setLastName(row.getString("last_name"));
return actor;

}
}
INSERT,UPDATE以及DELETE用ReactiveCqlTemplate
您可以使用该execute(…)方法来执行INSERT,UPDATE和DELETE操作。参数值通常作为可变参数提供,或者作为对象数组提供。

以下示例显示如何使用 执行INSERT操作ReactiveCqlTemplate:

Mono applied = reactiveCqlTemplate.execute(
"INSERT INTO t_actor (first_name, last_name) VALUES (?, ?)",
"Leonor", "Watling");
以下示例显示如何使用 执行UPDATE操作ReactiveCqlTemplate:

Mono applied = reactiveCqlTemplate.execute(
"UPDATE t_actor SET last_name = ? WHERE id = ?",
"Banjo", 5276L);
以下示例显示如何使用 执行DELETE操作ReactiveCqlTemplate:

Mono applied = reactiveCqlTemplate.execute(
"DELETE FROM actor WHERE id = ?",
actorId);
Spring认证中国教育管理中心-Apache Cassandra 的 Spring 数据教程六
10.5.异常翻译
Spring Framework 为各种数据库和映射技术提供异常转换。这在传统上用于 JDBC 和 JPA。Spring Data for Apache Cassandra 通过提供
org.springframework.dao.support.PersistenceExceptionTranslator接口的实现将此功能扩展到 Apache Cassandra 。

映射到 Spring 的一致数据访问异常层次结构背后的动机 是让您编写可移植和描述性的异常处理代码,而无需针对特定的 Cassandra 异常进行编码和处理。Spring 的所有数据访问异常都继承自 DataAccessException该类,因此您可以确保可以在单个 try-catch 块中捕获所有与数据库相关的异常。

ReactiveCqlTemplate并ReactiveCassandraTemplate尽早传播异常。在处理反应序列期间出现的异常作为错误信号发出。

10.6.简介ReactiveCassandraTemplate
该ReactiveCassandraTemplate班,地处
org.springframework.data.cassandra包,是在Spring Data的卡桑德拉支持的核心类。它提供了丰富的功能集来与数据库交互。该模板提供方便的数据访问操作来创建、更新、删除和查询 Cassandra,并提供域对象和 Cassandra 表行之间的映射。

配置后,ReactiveCassandraTemplate就是线程安全的,可以跨多个实例重复使用。

Cassandra 表中的行和域类之间的映射是通过委托给CassandraConverter接口的实现来完成的。Spring 提供了默认实现,MappingCassandraConverter但您也可以编写自己的自定义转换器。有关更多详细信息,请参阅“映射”。

本ReactiveCassandraTemplate类实现了
ReactiveCassandraOperations接口。方法名称尽可能ReactiveCassandraOperations与 Cassandra 中的名称匹配,以使熟悉 Cassandra 的开发人员熟悉 API。

例如,你可以找到方法,例如select,insert,delete,和update。设计目标是尽可能轻松地在基本 Cassandra 驱动程序和
ReactiveCassandraOperations. 两个 API 之间的主要区别是ReactiveCassandraOperations可以传递域对象而不是 CQL 和查询对象。

在ReactiveCassandraTemplate实例上引用操作的首选方法是通过其接口
ReactiveCassandraOperations.

的默认转换器实现ReactiveCassandraTemplate是
MappingCassandraConverter. 虽然MappingCassandraConverter可以使用附加元数据来指定对象到行的映射,但它也可以通过使用字段和表名称映射的约定来转换不包含附加元数据的对象。这些约定以及映射注释的使用在“映射”中进行了解释。

的另一个核心特征CassandraTemplate是异常翻译。Cassandra Java 驱动程序抛出的异常被转换为 Spring 的可移植数据访问异常层次结构。有关更多信息,请参阅“异常翻译”。

10.6.1.实例化ReactiveCassandraTemplate
ReactiveCassandraTemplate应该始终配置为 Spring bean,尽管前面的示例显示了如何直接实例化它。但是,本节假定模板在 Spring 模块中使用,因此也假定正在使用 Spring 容器。

有两种方法可以获取 a ReactiveCassandraTemplate,具体取决于您加载 Spring 的方式ApplicationContext:

自动装配
Bean 查找 ApplicationContext
自动装配
您可以将 a 自动装配ReactiveCassandraTemplate到您的项目中,如以下示例所示:

@Autowired
private ReactiveCassandraOperations reactiveCassandraOperations;
像所有的春天自动连接,这是假定只有一个bean类型的
ReactiveCassandraOperations中ApplicationContext。如果您有多个ReactiveCassandraTemplatebean(如果您在同一个项目中使用多个键空间就可能是这种情况),那么您可以使用@Qualifier注释来指定要自动装配的 bean。

@Autowired
@Qualifier("keyspaceTwoTemplateBeanId")
private ReactiveCassandraOperations reactiveCassandraOperations;
Bean 查找ApplicationContext
您还可以ReactiveCassandraTemplate从 中查找bean ApplicationContext,如以下示例所示:

ReactiveCassandraOperations reactiveCassandraOperations = applicationContext.getBean("reactiveCassandraOperations", ReactiveCassand

相关文章
|
2月前
|
安全 Java 数据库
安全无忧!在 Spring Boot 3.3 中轻松实现 TOTP 双因素认证
【10月更文挑战第8天】在现代应用程序开发中,安全性是一个不可忽视的重要环节。随着技术的发展,双因素认证(2FA)已经成为增强应用安全性的重要手段之一。本文将详细介绍如何在 Spring Boot 3.3 中实现基于时间的一次性密码(TOTP)双因素认证,让你的应用安全无忧。
139 5
|
14天前
|
安全 Java 数据安全/隐私保护
基于内存认证的 Spring Security
通过本文的介绍,希望您能够深入理解基于内存认证的Spring Security配置与使用方法,并能够在实际开发中灵活应用这一技术,提升应用的安全性和用户体验。
45 9
|
29天前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
68 8
|
27天前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
42 1
|
2月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
44 9
|
2月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
78 1
|
2月前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
87 1
|
2月前
|
分布式计算 监控 大数据
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
81 1
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
96 2
|
3月前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
164 11

推荐镜像

更多