La cosa più semplice da fare sarebbe quella di aggiungere il Spring Boot Starter Data Cassandra dipendenza alla vostra primavera Boot applicazione, in questo modo ...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
Inoltre, questo aggiungerà la Cassandra primavera datidependency a la tua applicazione.
Con primavera dati Cassandra, è possibile configurare spazio delle chiavi della vostra applicazione (s) utilizzando il CassandraClusterFactoryBean
(o, più precisamente, la sottoclasse ... CassandraCqlClusterFactoryBean
) chiamando il metodo setKeyspaceCreations(:Set).
La classe KeyspaceActionSpecification è abbastanza auto-esplicativa. Puoi persino crearne uno con lo KeyspaceActionSpecificationFactoryBean, aggiungerlo a un Set
e quindi passarlo al metodo setKeyspaceCreations(..)
su CassandraClusterFactoryBean
.
Per generare tabelle dell'applicazione, è essenzialmente solo bisogno di annotare l'oggetto dominio di applicazione (s) (entità) utilizzando la SD Cassandra @Table annotazioni, e assicurarsi che gli oggetti del dominio/entità possono essere trovati sul CLASSPATH dell'applicazione.
In particolare, è possibile avere la classe di applicazione @Configuration
estendere la classe SD Cassandra AbstractClusterConfiguration. Qui troverai il metodo getEntityBasePackages():String[] che puoi sovrascrivere per fornire le posizioni dei pacchetti contenenti le classi oggetto/entità dominio del dominio dell'applicazione, che SD Cassandra utilizzerà quindi su scan per oggetto/entità di dominio @Table
.
con l'applicazione @Table
oggetto di dominio/entità correttamente identificati, è possibile impostare la SD Cassandra SchemaAction-CREATE
utilizzando il metodo CassandraSessionFactoryBean
, setSchemaAction(:SchemaAction). Questo creerà Tabelle nel tuo Keyspace per tutti gli oggetti/entità di dominio trovati durante la scansione, fornendo identified l'appropriato spazio Keys sul tuo CassandraSessionFactoryBean
in modo appropriato.
Ovviamente, se l'applicazione crea/utilizza più Keyspaces, sarà necessario creare un separato CassandraSessionFactoryBean
per ogni spazio delle chiavi, con la proprietà di configurazione entityBasePackages
impostare in modo appropriato per le entità che appartengono a un particolare spazio delle chiavi, in modo che le tabelle associate sono creato in quel Keyspace.
Ora ...
per i tavoli "aggiuntivi" per utente, che è un po 'più complicato e difficile.
Qui potrebbe essere possibile utilizzare i profili Spring, tuttavia i profili vengono generalmente applicati solo all'avvio. Se un utente diverso accede a un'applicazione già in esecuzione, è necessario un modo per fornire classi @Configuration
aggiuntive a Spring ApplicationContext
in fase di esecuzione.
tuo Primavera Boot applicazione potrebbe iniettare un riferimento a un AnnotationConfigApplicationContext
, e poi usarlo su un evento di accesso a livello di programmazione register ulteriori @Configuration
classi in base all'utente che ha effettuato l'accesso all'applicazione. Devi seguire le tue chiamate register(Class...)
con uno ApplicationContext.refresh()
.
È inoltre necessario gestire in modo appropriato la situazione in cui le tabelle esistono già.
Questo non è attualmente supportato in SD Cassandra, ma vedere DATACASS-219 per ulteriori dettagli.
Tecnicamente, sarebbe molto più semplice creare tutte le possibili tabelle richieste dall'applicazione per tutti gli utenti in fase di esecuzione e utilizzare le impostazioni di sicurezza di Cassandra per limitare l'accesso dei singoli utenti in base al ruolo e alle autorizzazioni assegnate.
Un'altra opzione potrebbe essere solo quella di creare spazi temporanei e/o tabelle temporanei quando necessario quando un utente accede all'applicazione, rilasciarli quando l'utente si disconnette.
Chiaramente, ci sono molte scelte diverse qui, e si riduce più alle decisioni architettoniche, ai compromessi e alle considerazioni, quindi alla fattibilità tecnica, quindi state attenti.
Spero che questo aiuti.
Cheers!
Ho seguito questo codice, ma ancora non riesco a creare Keyspace e tabelle all'avvio dell'applicazione. C'è qualcos'altro che mi manca? Per favore guidami. – Milesh