Você pode aprender mais sobre o curso olhando o registro do dia aberto .

Spring Data Neumann é o primeiro lançamento desde a transição para um novo ciclo de lançamento de seis meses. Reduzir o tempo entre os lançamentos nos permitirá lançar novos recursos com mais frequência e isso, por sua vez, também irá acelerar você. Nesta versão, além da nova funcionalidade, também há mudanças importantes que potencialmente quebram a compatibilidade com as versões anteriores.
Alterando as versões principais
Para os projetos listados abaixo, o número da versão principal foi aumentado devido a alterações que quebram a compatibilidade em APIs ou drivers públicos:
- Spring Data JDBC 2.0 (versão anterior 1.1)
- A migração de 1.1 para 2.0 é descrita neste post .
- Spring Data MongoDB 3.0 (versão anterior 2.2)
- Spring Data para Apache Cassandra 3.0 (versão anterior 2.2)
- Spring Data Couchbase 4.0 (versão anterior 3.2)
- Spring Data Elasticsearch 4.0 (versão anterior 3.2)
- Para detalhes sobre as mudanças, veja este post .
Antes de passar para a descrição da nova funcionalidade, vamos dar uma olhada nas mudanças na API. Para obter mais detalhes, consulte as seções de atualização na documentação dos respectivos módulos.
Se você não estiver pronto para atualizar agora, lembre-se de que a versão anterior do Moore terá suporte por mais doze meses.
JDBC
Cada armazenamento SQL tem suas próprias características que requerem uma abordagem especial. Para melhorar o suporte, foram feitas alterações que afetaram o aumento da versão principal. Agora,
AbstractJdbcConfiguration
por padrão, ele tenta identificar os Dialect
bancos de dados fornecidos DataSource
ou registrados DialectResolver
. Por padrão, o módulo JDBC vem com dialetos para H2, HSQLDB, MySQL, Postgres, MariaDB, Microsoft SqlServer e DB2. O Spring Data JDBC agora escapa todos os nomes de tabela e coluna por padrão. Embora isso possa fazer com que você mude as suas CREATE TABLE
anotações @Column
, isso lhe dará mais flexibilidade ao nomear objetos.
MongoDB
O único jar com drivers para MongoDB (mongo-java-driver) é dividido em vários: -sync e -reactivestreams, que permite que você selecione apenas o driver necessário. Ou seja, os drivers MongoDB síncronos e reativos agora são dependências opcionais que devem ser adicionadas manualmente. Com a migração para novos drivers, algumas das APIs já obsoletas foram removidas permanentemente, afetando as classes de configuração, como os
AbstractMongoConfiguration
namespaces XML fornecidos pelo Spring Data. Consulte a seção de atualização na documentação para obter detalhes .
Apache Cassandra
A atualização muito esperada dos drivers do Apache Cassandra para 4.0 não apenas atualiza o pacote e a estrutura de dados, mas também muda o comportamento no cluster e no tratamento da sessão. Isso levou a grandes mudanças de configuração que afetam a configuração XML e podem afetar a configuração no código para alguns cenários complexos (mais difícil do que uma configuração padrão simples
AbstractCassandraConfiguration
).
Couchbase
Seguindo o Couchbase SDK, atualizamos da versão 3.x para 4.x, que adicionou gerenciamento automático de índice e suporte a transações. Leia mais no blog Couchbase .
Elasticsearch
Adicionado suporte para HTTP Client API, SSL e Proxy. Uma série de mudanças também foram feitas, incluindo a otimização e remoção da API obsoleta, que influenciou a mudança no número da versão principal. O módulo ElasticSearch agora inclui Documento, que inclui
Get-
, Index-
e Search-Requests
, o que permite a utilização de tipos como SearchHit
, SearchHits
e quando o mapeamento SearchPage
.
Agora, vamos avançar para as inovações.
Repositórios com suporte para corrotinas Kotlin
A versão Neumann continua a se basear no suporte para corrotinas Kotlin que começaram na versão Moore anterior, adicionando suporte para elas nos repositórios.
As corrotinas são mantidas por meio de repositórios Spring Data reativos. Agora você pode usar métodos de consulta reativos ou escrever suas próprias funções suspensas.
interface StudentRepository : CoroutineCrudRepository<Student, String> {
suspend fun findOne(id: String): User
fun findByLastname(firstname: String): Flow<Student>
}
@Primary
-repositórios e a palavra-chave "pesquisar"
Essas duas pequenas alterações melhoram a recuperação de beans de repositório e a nomenclatura de métodos de consulta. Agora a anotação
@Primary
nos repositórios de interface é levada em consideração na configuração do bean, o que ajuda o contêiner a resolver dependências. Agora você pode usar um prefixo para métodos de consulta "search"
, da mesma forma "find"
. Agora é possível escrever métodos "search...By..."
, por exemplo searchByFirstname
.
Embora isso tenha sido feito para bancos de dados como Elasticsearch, vamos prosseguir e ver como
search...By...
você pode usar R2DBC no Spring Data.
Gerando consultas R2DBC
Até agora, Spring Data R2DBC usou anotações
@Query
para métodos de consulta, com exceção dos métodos padrão expostos por meio de interfaces *.Repository
. Agora, a geração de solicitações por nome de método funciona de maneira semelhante a outros módulos:
interface StudentRepository extends ReactiveCrudRepository<Student, Long> {
Flux<Student> searchByLastname(String lastname); (1)
}
Isso é equivalente a:
@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
Paginação e geração de consulta para JDBC
Spring Data JDBC 2.0 suporta ainda mais bancos de dados relacionais. Agora estamos executando nossos testes de integração em H2, HSQLDB, MySQL, MariaDB, PostgreSQL e DB2.
Para esses bancos de dados, oferecemos suporte à geração e paginação de consultas. Por exemplo:
interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
Page<Student> findByLastname(String lastname);
}
Nesta versão, também continuamos avançando em direção ao NoSQL, começando com o MongoDB e uma nova maneira de modificar documentos.
MongoDB Update Aggregations
Essa mudança importante (que não foi totalmente preparada na versão Moore) permite que o Pipeline de agregação seja usado para atualizar dados. Assim, as alterações podem conter expressões complexas, como condições nos valores dos campos, por exemplo:
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();
Além disso, o Spring Data MongoDB sem dúvida se beneficiará do suporte recentemente adicionado para objetos incorporados em outros módulos.
Suporte para tipos incorporados no Apache Cassandra
O Apache Cassandra agora oferece suporte a mapeamento de tipo incorporado, que está disponível há muito tempo no Spring Data JDBC . No modelo de domínio, os objetos embutidos são usados para Objetos de Valor cujas propriedades são armazenadas em uma única tabela. No exemplo a seguir,
Student.name
há uma anotação acima do campo @Embedded
, que faz com que todos os campos da classe Name
sejam armazenados em uma tabela que Student
consiste em três colunas ( student_id
, firstname
e 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;
}
Auditoria Elasticsearch
Visto que no ElasticSearch a existência
id
não é um critério suficiente para determinar se um objeto é novo, é necessário Persistable
fornecer informações adicionais durante a implementação usando o método 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);
}
}
A adição
@EnableElasticsearchAuditing
à configuração registra todos os componentes necessários para auditoria.
Neo4j
Spring Data Neo4j agora oferece suporte à sintaxe de consulta Neo4j 4.0 com parâmetros. A sintaxe do placeholder foi descontinuada anteriormente e agora foi completamente removida. O módulo agora conta com os drivers Neo4j-OGM e Neo4j Java mais recentes para melhorar a interoperabilidade com o Neo4j mais recente.
Também há um trabalho ativo de suporte à reatividade para bancos de dados de gráficos e integração ao Spring Data com Neo4j RX (embora isso não esteja incluído na versão atual, já está pronto para inclusão na próxima).
Apache Geode / VMware Tanzu GemFire
Os módulos Spring Data para Apache Geode e VMware Tanzu GemFire (
spring-data-geode
e spring-data-gemfire
) são combinados em um projeto sob o título SDG. Apache Geode foi atualizado para 1.12.0 e GemFire para 9.10.0, que por sua vez é baseado no Apache Geode 1.12. Além disso, o SDG compila e executa no JDK versões 8 a 14. O
SDG agora oferece suporte à publicação de eventos de autotransação , que mapeia o Cache TransactionEvent do GemFire / Geode Cache para o ApplicationEvent apropriado no contexto.
Agora também é possível pausar o envio de eventos em um AEQ configurado com SDG. Além disso, ao construir aplicativos baseados em GemFire / Geode Locator usando anotação SDG,
@LocatorApplication
você pode personalizarLocator para se conectar a outros Locators , criando assim um cluster altamente disponível e resiliente.
Saiba mais sobre o curso.