您可以通过查看开放日的记录来了解有关该课程的更多信息。
Spring Data Neumann是自过渡到新的六个月发行周期以来的第一个发行版。减少发布之间的时间将使我们能够更频繁地发布新功能,这反过来也可以加快您的速度。在此版本中,除了新功能之外,还进行了重要的更改,有可能破坏与以前版本的兼容性。
更改主要版本
对于下面列出的项目,由于更改会破坏公共API或驱动程序的兼容性,因此增加了主要版本号:
- Spring Data JDBC 2.0(以前的版本1.1)
- 从1.1到2.0的迁移在这篇文章中进行了描述。
- Spring Data MongoDB 3.0(先前版本2.2)
- Apache Cassandra 3.0(2.2以前的版本)的Spring数据
- Spring Data Couchbase 4.0(以前的版本3.2)
- Spring Data Elasticsearch 4.0(先前版本3.2)
- 有关更改的详细信息,请参阅此文章。
在继续描述新功能之前,让我们看一下API中的更改。有关详细信息,请参阅相应模块的文档中的“升级”部分。
如果您不准备立即更新,请记住,将在另外十二个月内支持以前的Moore版本。
JDBC
每个SQL存储都有其自身的特征,需要采取特殊的方法。为了改进他们的支持,进行了一些更改,这些更改影响了主要版本的增加。现在,
AbstractJdbcConfiguration
默认情况下,它将尝试Dialect
从给定DataSource
或已注册识别数据库DialectResolver
。默认情况下,JDBC模块随附了针对H2,HSQLDB,MySQL,Postgres,MariaDB,Microsoft SqlServer和DB2的方言。Spring Data JDBC现在默认情况下会转义所有表名和列名。尽管这可能会导致您更改自己的CREATE TABLE
注解或注解@Column
,但这将使您在命名对象时更具灵活性。
MongoDB
带有MongoDB驱动程序的单个jar(mongo-java-driver)分为几个:-sync和-reactivestreams,这使您可以仅选择所需的驱动程序。也就是说,同步和反应式MongoDB驱动程序现在都是可选的依赖项,必须手动添加。随着向新驱动程序的迁移,一些已经弃用的API被永久删除,从而影响了配置类,例如
AbstractMongoConfiguration
Spring Data提供的XML名称空间。有关详细信息,请参见文档中的升级部分。
阿帕奇·卡桑德拉(Apache Cassandra)
早就应该将Apache Cassandra驱动程序更新为4.0,不仅更新了程序包和数据结构,而且还更改了群集和会话处理中的行为。这导致重大配置更改,从而影响XML配置,并可能影响某些复杂场景(比简单的默认设置难)的代码配置
AbstractCassandraConfiguration
。
Couchbase
遵循Couchbase SDK,我们从版本3.x升级到版本4.x,其中添加了自动索引管理和事务支持。在Couchbase博客上阅读更多内容。
弹性搜索
添加了对HTTP客户端API,SSL和代理的支持。还进行了许多更改,包括优化和删除了不赞成使用的API,这影响了主版本号的更改。该Elasticsearch模块现在包括文档,其中包括
Get-
,Index-
并且Search-Requests
,它允许您使用类型,如SearchHit
,SearchHits
和SearchPage
。
现在让我们继续创新。
支持Kotlin协程的存储库
Neumann版本继续建立在对Kotlin协程的支持之上,该支持始于先前的Moore版本,并在存储库中增加了对它们的支持。
协程通过响应式Spring Data存储库进行维护。现在,您可以使用反应式查询方法或编写自己的暂停函数。
interface StudentRepository : CoroutineCrudRepository<Student, String> {
suspend fun findOne(id: String): User
fun findByLastname(firstname: String): Flow<Student>
}
@Primary
-存储库和“搜索”关键字
这两个小的更改改善了存储库Bean的检索和查询方法的命名。现在
@Primary
,在bean配置中考虑了接口存储库上的注释,这有助于容器解决依赖关系。现在,您可以"search"
类似地将前缀用于查询方法"find"
。现在可以编写方法"search...By..."
,例如searchByFirstname
。
尽管这是针对像Elasticsearch这样的数据库完成的,但让我们继续前进,看看如何
search...By...
在Spring Data中使用R2DBC。
生成R2DBC查询
到目前为止,
@Query
除了通过interfaces公开的默认方法外,Spring Data R2DBC已将注释用于查询方法*.Repository
。现在,通过方法名称生成请求与其他模块类似:
interface StudentRepository extends ReactiveCrudRepository<Student, Long> {
Flux<Student> searchByLastname(String lastname); (1)
}
这等效于:
@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
JDBC分页和查询生成
Spring Data JDBC 2.0支持更多的关系数据库。现在,我们正在H2,HSQLDB,MySQL,MariaDB,PostgreSQL和DB2上运行集成测试。
对于这些数据库,我们支持查询生成和分页。例如:
interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
Page<Student> findByLastname(String lastname);
}
在此版本中,我们还将继续从NogoDB开始,并以一种新的修改文档的方式向NoSQL迈进。
MongoDB更新汇总
这项重要的更改(在Moore版本中尚未充分准备)允许使用汇总管道更新数据。因此,更改可以包含复杂的表达式,例如字段值的条件,例如:
AggregationUpdate update = Aggregation.newUpdate()
.set("average").toValue(ArithmeticOperators.valueOf("tests").avg())
.set("grade").toValue(ConditionalOperators.switchCases(
when(valueOf("average").greaterThanEqualToValue(90)).then("A"),
when(valueOf("average").greaterThanEqualToValue(80)).then("B"),
when(valueOf("average").greaterThanEqualToValue(70)).then("C"),
when(valueOf("average").greaterThanEqualToValue(60)).then("D"))
.defaultTo("F")
);
template.update(Student.class)
.apply(update)
.all();
同样,Spring Data MongoDB无疑将从最近添加的对其他模块中的嵌入式对象的支持中受益。
支持Apache Cassandra中的嵌入式类型
Apache Cassandra现在支持嵌入式类型映射,该类型早已在Spring Data JDBC中提供。在域模型中,内置对象用于其属性存储在单个表中的值对象。在以下示例中,
Student.name
有一个注解字段以上@Embedded
,这将导致类的所有字段Name
被存储在表中Student
由三个柱(student_id
,firstname
和lastname
):
public class Student {
@PrimaryKey("student_id")
private String studentId;
@Embedded(onEmpty = USE_NULL)
Name name;
}
public class Name {
private String firstname;
private String lastname;
}
Elasticsearch审核
由于在ElasticSearch中存在状态
id
不足以确定对象是否为新对象,因此有必要在实现期间Persistable
使用以下方法提供附加信息isNew()
:
@Document(indexName = "person")
public class Person implements Persistable<Long> {
@Id private Long id;
private String lastName;
private String firstName;
@Field(type = Date)
private Instant createdDate;
private String createdBy
@Field(type = Date)
private Instant lastModifiedDate;
private String lastModifiedBy;
@Override
public boolean isNew() {
return id == null || (createdDate == null && createdBy == null);
}
}
@EnableElasticsearchAuditing
然后,配置
的新增内容会记录审核所需的所有组件。
Neo4j
Spring Data Neo4j现在支持带有参数的Neo4j 4.0查询语法。以前不推荐使用占位符语法,现在将其完全删除。该模块现在依靠最新的Neo4j-OGM和Neo4j Java驱动程序来提高与最新Neo4j的互操作性。
在支持图形数据库的反应性以及将其与Neo4j RX集成到Spring Data中方面,也正在进行着积极的工作(尽管当前版本中不包括此功能,但已经准备好将其包含在下一个版本中)。
Apache Geode / VMware Tanzu GemFire
用于Apache Geode和VMware Tanzu GemFire(
spring-data-geode
和spring-data-gemfire
)的Spring Data模块组合为一个项目,标题为SDG。 Apache Geode已更新为1.12.0,GemFire已更新为9.10.0,后者又基于Apache Geode 1.12。此外,SDG可以在JDK版本8至14上编译并运行
.SDG现在支持发布自动事务事件,该事件将GemFire / Geode Cache中的Cache TransactionEvent映射到上下文中的相应ApplicationEvent。
现在也可以在配置了SDG的AEQ上暂停发送事件。此外,使用SDG注释构建基于GemFire / Geode Locator的应用程序时,
@LocatorApplication
您可以自定义定位器连接到其他定位器,从而创建一个高可用性和弹性集群。
了解有关该课程的更多信息。