Controllo dei dati con Spring Data R2dbc

Prova Il Nostro Strumento Per Eliminare I Problemi

Tenere traccia delle modifiche apportate ai dati in un database è una parte importante di molte applicazioni. Conoscere Quando un record è stato creato o aggiornato e Chi la modifica apportata consente funzionalità di controllo essenziali.

In questo tutorial imparerai come controllare automaticamente le modifiche ai dati utilizzando Dati primaverili R2DBC E Dati di primavera Envers . Implementeremo un'applicazione Spring Boot di esempio che archivia i dati in un database PostgreSQL a cui si accede utilizzando l'API reattiva R2DBC. L'applicazione terrà traccia dei seguenti campi di controllo per le entità:

  • Data di Creazione
  • Creato da
  • Data dell'ultima modifica
  • Ultima modifica di

Spring Data Envers si integra con i repository Spring Data per generare automaticamente la logica di controllo. Dobbiamo solo aggiungere alcune semplici annotazioni e le funzionalità di controllo saranno abilitate senza codice aggiuntivo!



Panoramica del progetto di esempio

Dimostrare Controllo Spring Data R2DBC , creeremo un'API con i seguenti endpoint:

  • POST /api/utenti - Creare un utente
  • OTTIENI /api/users - Ottieni tutti gli utenti
  • GET /api/users/{id} - Ottieni utente tramite ID
  • PUT /api/utenti/{id} - Aggiorna utente
  • ELIMINA /api/users/{id} - Elimina utente

Le modifiche agli utenti apportate tramite questi endpoint avranno automaticamente tracciati i campi di controllo nel database senza alcun codice di controllo personalizzato.

Tecnologie chiave utilizzate

  • Spring Boot: framework per la creazione di applicazioni Spring
  • Spring Data R2DBC: connettività con database relazionali reattivi con supporto R2DBC
  • Spring Data Envers - Controllo dei dati con Hibernate Envers
  • Base di dati PostgreSQL

Impostazione del progetto

Inizieremo generando a Stivale primaverile progetto utilizzando Inizializzazione primavera con le seguenti dipendenze:

  • Web reattivo primaverile
  • Dati primaverili R2DBC
  • Driver PostgreSQL
  • Lombok

Nel tuo proprietà.applicazione , configura i dettagli della connessione PostgreSQL:

|_+_|

Nel pom.xml , aggiungi la dipendenza Spring Data Envers:

|_+_|

Ciò copre le dipendenze e le configurazioni richieste per abilitare il controllo JPA di Spring Data con R2DBC e PostgreSQL.

Schema della banca dati

Prima di scrivere qualsiasi codice applicativo, creiamo un semplice schema di database per |_+_| entità.

Connettiti al database PostgreSQL configurato in precedenza ed esegui il seguente SQL:

|_+_|

Questo crea un |_+_| tabella con colonne per ID, nome/cognome e campi di controllo per date di creazione/modifica e da chi.

Configurazione dell'entità

Successivamente, definiamo |_+_| entità per la nostra applicazione:

|_+_|

Nota che questa è una semplice entità POJO che si mappa direttamente a |_+_| tabella del database.

Un paio di annotazioni chiave utilizzate qui:

  • @RevisionEntity - Contrassegna questo come entità di revisione per cui Spring Data Envers dovrebbe gestire il controllo
  • @Dati - Annotazione Lombok che genera automaticamente getter/setter ecc.

Abilita controllo

Per abilitare la funzionalità di controllo, dobbiamo configurare e registrare un |_+_| fagiolo:

|_+_|

Annotazioni chiave utilizzate:

  • @EnableR2dbcAuditing - Abilita il controllo R2DBC
  • EnversRevisionRepository - Bean che memorizza le revisioni di audit per entità

E questo è tutto per la configurazione dell'audit! Il |_+_| gestisce la memorizzazione delle revisioni mentre |_+_| L'annotazione indica a Spring Data Envers di abilitare le funzionalità di controllo per |_+_|.

Repository di dati primaverili

Per l'accesso ai dati, definiremo un semplice repository Spring Data R2DBC:

|_+_|

Estendendo |_+_|, le capacità di controllo vengono ereditate automaticamente nell'implementazione del repository personalizzato.

Controllore RESTO

Esponiamo anche alcuni endpoint CRUD di base per la creazione/lettura/aggiornamento/eliminazione degli utenti:

|_+_|

Questi endpoint delegheranno a |_+_| per le operazioni CRUD. E poiché le funzionalità di controllo sono abilitate per quel repository tramite Envers, tutte le modifiche verranno automaticamente monitorate in termini di revisione.

Verifica dell'audit

L'applicazione è ora pronta! Costruiamolo ed eseguiamolo, quindi facciamo alcune richieste per verificare il funzionamento del controllo.

Crea un nuovo utente:

|_+_|

La query SQL eseguita da Spring Data per salvare l'entità sarà simile a:

|_+_|

Nota come vengono utilizzati la data e l'ora correnti e un valore predefinito per le colonne di controllo sulla creazione dell'entità.

Ora recupera tutti gli utenti:

|_+_|

Aggiorna l'utente precedentemente creato:

|_+_|

L'SQL di aggiornamento sarebbe:

|_+_|

Le ultime colonne di controllo modificate vengono popolate automaticamente negli aggiornamenti dell'entità.

E questo è tutto! Dati di primavera Envers gestisce tutto il controllo dietro le quinte permettendoci di concentrarci sulla logica aziendale.

Configurazione di controllo avanzata

Oltre al controllo di base sopra indicato, Envers fornisce ulteriori opzioni di personalizzazione come:

  • Archiviare le revisioni dell'audit in tabelle separate
  • Definizioni di entità di revisione personalizzate
  • Sostituisci le mappature dei campi di controllo
  • Imposta l'utente corrente dal contesto di sicurezza
  • Applica filtri per tenere traccia delle modifiche selettive delle entità

Memorizzazione delle revisioni in tabelle separate

Per impostazione predefinita, le revisioni di controllo vengono archiviate nella stessa tabella dell'entità utilizzando una strategia di disattivazione. Questo può anche essere configurato per utilizzare invece tabelle di revisione separate.

Abilita una tabella di revisione per entità utilizzando |_+_| annotazione:

|_+_|

Ora un |_+_| verrà utilizzata per memorizzare gli audit separatamente da |_+_| tavolo.

Sostituzione delle mappature dei campi di controllo

I nomi delle colonne del database utilizzati per il controllo possono anche essere configurati esplicitamente utilizzando le annotazioni dei campi anziché le convenzioni.

|_+_|

Qui i nomi delle colonne per i dati di revisione sono mappati esplicitamente con annotazioni.

Conclusione

L'implementazione dei registri di controllo dei dati è un gioco da ragazzi Dati di primavera Envers . Gestisce tutte le complessità legate alla gestione delle revisioni e delle mappature dietro le quinte.

Integrando Envers con Spring Data R2DBC, abbiamo creato un'applicazione con controllo automatico utilizzando il driver reattivo PostgreSQL. Lo stesso approccio funziona anche per i repository Spring Data bloccanti/relazionali.

Alcuni punti chiave:

  • Abilita il controllo con |_+_|
  • Contrassegna le entità come |_+_|
  • Estendi |_+_| nei repository personalizzati
  • Campi di controllo compilati automaticamente al salvataggio/aggiornamento!

Fare riferimento agli esempi di codice nel file Campioni di Spring Data Envers per casi d'uso più avanzati.

Guarda Anche: