Data Data Cassandra prend en charge plusieurs référentiels de Keyspace dans le même contexte d'application? Je configure la configuration de données de printemps Cassandra à l'aide de la classe Javaconfig suivante
@Configuration @EnableCassandraRepositories(basePackages = "com.blah.secondrepository") public class SecondCassandraConfig extends AbstractCassandraConfiguration { @Override public String getKeyspaceName() { return "keyspace2"; }
6 Réponses :
Essayez de nommer explicitement votre Dans votre première configuration: p> ... et dans votre deuxième configuration: P> Je pense que cela pourrait faire le tour. S'il vous plaît poster si ce n'est pas le cas. P> p> CassandraTemplate CODE> haricots pour chaque clavier et en utilisant ces noms dans le
@enablecassandRarePositories code> Annotation
CassandraTemplplateef code> attribut (voir lignes avec
/ * Modifié * / code> pour les modifications).
Je vais essayer cela et revenir.
Pas capable de trouver des haricots du référentiel.
Il semble qu'il soit recommandé d'utiliser des noms de frappe entièrement qualifiés dans des requêtes gérées par une session, car la session n'est pas très légère.
S'il vous plaît voir référence ici p>
Bonne trouvaille. Il convient de noter que votre exemple lié dispose de 100 claviers, alors que celui-ci a 2. deux sessions non si légères pourraient être acceptables où 100 causeront des problèmes.
J'ai essayé cette approche. Cependant, j'ai rencontré des exceptions tout en essayant d'accéder à la famille de colonnes 2. Les opérations sur la famille de colonnes 1 semblent être bien. p>
Je devine parce que le cassandrasesssessorybeanbeanbeanbean est un singleton. Et cette cause ColummyFamily columnyFamily non configuré2 p>
Voici quelques journaux supplémentaires pour fournir le contexte P>
débogage org.springframework.beans.Factory.support.defaultListableBeanFactory - instance mise en cache de Singleton 'EntityManagerFactory' Déboguer org.springframework.beans.Factory.support.defaultListableBeanFactory - instance mise en cache de Singleton 'Session' Déboguer org.springframework.beans.Factory.support.defaultListableBeanFactory - instance mise en cache de renvoi de Singleton Bean 'Cluster' P>
org.springframework.cassandra.support.exception.CassandrainValidQueryException: ColumsFamily de colonne non configuréggroup; Exception imbriquée est com.datastax.driver.core.Exception.InvalidQueryException: ColummyFamily columnyFamily2 non configuré2 à org.springframework.cassandra.support.cassandraExceptionTtranslator.TranslateExceptionIflossible (CassandraExceptionTtranslator.java:116) à org.springframework.cassandra.config.cassandracqlsesssessorybeanBean.TransLateSypreSompossible (CassandracQlsessssibleBean.java:74) P>
hmm. Ne peut pas commenter la réponse de Matthew-Adams. Mais cela réutilisera l'objet de session comme une abstractcassandraconfiguration est annoté avec @Bean sur tous les getters pertinents. P>
Dans une configuration similaire, j'avais initialement travailler avec écraser tous les getters et leur donner spécifiquement des noms de haricots différents. Mais à cause du printemps prétendant toujours avoir besoin de haricots avec les noms. J'ai maintenant dû faire une copie d'abstractcassandraconfiguration sans annotations que je peux hériter. P>
Assurez-vous d'exposer la CassandraTemplate afin que vous puissiez vous reporter à partir de @enablecassandRarePositories si vous utilisez celles-ci. P>
J'ai également une mise en œuvre distraite de l'abstractclusterconfiguration pour exposer un CassandracQLClusteroryBean commun afin que les connexions sous-jacentes soient réutilisées. P>
EDIT: Je suppose que, selon le fil de courriel lié par BcLarance, il faut vraiment tenter de réutiliser l'objet de session. Semble la manière dont les données de printemps, Cassandra n'est pas vraiment configurée pour cela si p>
Un problème avec mon approche est que l'objet de la session est créé dans un après-dépôt sur le CassandracqlSessoryBean. Donc, il doit être un haricot au printemps pour que cela se produise
Application d'application de travail: http://valchkou.com/spring-boot-cassandra.html#multikeyspacepace
L'idée dont vous avez besoin de haricots par défaut remplaçants: SéanceFactory et Modèle P>
échantillon: p>
1) Application.yml P>
package com.sample.repo.test1; @Repository public interface RepositoryForTest1 extends CassandraRepository<MyEntity> { // .... } package com.sample.repo.test2; @Repository public interface RepositoryForTest2 extends CassandraRepository<MyEntity> { // .... }
Pas capable de trouver un référentiel
Dans mon cas, j'avais une application de démarrage de printemps où la majorité des dépôts étaient dans un clavier, et deux seulement étaient dans une seconde. J'ai conservé la configuration de démarrage de ressort par défaut pour le premier espace de frappe et configuré manuellement le second clavier à l'aide du même démarrage de ressort d'approche de configuration utilise pour son autoconfiguration.
@Configuration public class SecondKeyspaceCassandraConfig { public static final String KEYSPACE_NAME = "second_keyspace"; /** * @see org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration#cassandraSession(CassandraConverter) */ @Bean(autowireCandidate = false) public CassandraSessionFactoryBean secondKeyspaceCassandraSession( Cluster cluster, Environment environment, CassandraConverter converter) { CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); session.setCluster(cluster); session.setConverter(converter); session.setKeyspaceName(KEYSPACE_NAME); Binder binder = Binder.get(environment); binder.bind("spring.data.cassandra.schema-action", SchemaAction.class) .ifBound(session::setSchemaAction); return session; } /** * @see org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration#cassandraTemplate(com.datastax.driver.core.Session, CassandraConverter) */ @Bean(autowireCandidate = false) public CassandraTemplate secondKeyspaceCassandraTemplate( Cluster cluster, Environment environment, CassandraConverter converter) { return new CassandraTemplate(secondKeyspaceCassandraSession(cluster, environment, converter) .getObject(), converter); } @Bean public SecondKeyspaceTableARepository cdwEventRepository( Cluster cluster, Environment environment, CassandraConverter converter) { return createRepository(CDWEventRepository.class, secondKeyspaceCassandraTemplate(cluster, environment, converter)); } @Bean public SecondKeyspaceTableBTypeRepository dailyCapacityRepository( Cluster cluster, Environment environment, CassandraConverter converter) { return createRepository(DailyCapacityRepository.class, secondKeyspaceCassandraTemplate(cluster, environment, converter)); } private <T> T createRepository(Class<T> repositoryInterface, CassandraTemplate operations) { return new CassandraRepositoryFactory(operations).getRepository(repositoryInterface); } }
Je renvoie ceci à l'ingénieur qui a manipulé la majeure partie du référentiel codant pour vous obtenir une réponse .. Asseyez-vous bien.