O que há de novo em Spring Data (Klara Dan von) Neumann

A tradução do artigo foi preparada em antecipação ao início do curso "Desenvolvedor no Spring Framework" .



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, AbstractJdbcConfigurationpor padrão, ele tenta identificar os Dialectbancos de dados fornecidos DataSourceou 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 TABLEanotaçõ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 AbstractMongoConfigurationnamespaces 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, SearchHitse 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 @Primarynos 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 @Querypara 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.namehá uma anotação acima do campo @Embedded, que faz com que todos os campos da classe Namesejam armazenados em uma tabela que Studentconsiste em três colunas ( student_id, firstnamee 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 idnão é um critério suficiente para determinar se um objeto é novo, é necessário Persistablefornecer 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-geodee 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, @LocatorApplicationvocê pode personalizarLocator para se conectar a outros Locators , criando assim um cluster altamente disponível e resiliente.






Saiba mais sobre o curso.






Consulte Mais informação






All Articles