gpt4 book ai didi

java - spring-data-cassandra 存储库的多键空间支持?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:29 25 4
gpt4 key购买 nike

Spring Data Cassandra 是否支持同一应用程序上下文中的多个键空间存储库?我正在使用以下 JavaConfig 类设置 cassandra spring 数据配置

@Configuration
@EnableCassandraRepositories(basePackages = "com.blah.repository")
public class CassandraConfig extends AbstractCassandraConfiguration {

@Override
public String getKeyspaceName() {
return "keyspace1";
}

在将存储库类移动到不同的包后,我尝试创建第二个配置类。

@Configuration
@EnableCassandraRepositories(basePackages = "com.blah.secondrepository")
public class SecondCassandraConfig extends AbstractCassandraConfiguration {

@Override
public String getKeyspaceName() {
return "keyspace2";
}

但是在那种情况下,如果存储库失败,则第一组设置失败,因为在键空间中找不到为实体配置的列族。我认为它可能正在寻找第二个键空间中的列族。

spring-data-cassandra 是否支持多个键空间存储库?我找到多个键空间引用的唯一地方是 here .但是它没有解释这是否可以用存储库来完成?

最佳答案

工作应用示例: http://valchkou.com/spring-boot-cassandra.html#multikeyspace

您需要覆盖默认 bean 的想法:sessionfactory 和模板

示例:

1) 应用程序.yml

 spring:
data:
cassandra:
test1:
keyspace-name: test1_keyspace
contact-points: localhost
test2:
keyspace-name: test2_keyspace
contact-points: localhost

2) 基础配置类

public abstract class CassandraBaseConfig extends AbstractCassandraConfiguration{
protected String contactPoints;
protected String keyspaceName;

public String getContactPoints() {
return contactPoints;
}
public void setContactPoints(String contactPoints) {
this.contactPoints = contactPoints;
}

public void setKeyspaceName(String keyspaceName) {
this.keyspaceName = keyspaceName;
}
@Override
protected String getKeyspaceName() {
return keyspaceName;
}
}

3) test1的配置实现

package com.sample.repo.test1;

@Configuration
@ConfigurationProperties("spring.data.cassandra.test1")
@EnableCassandraRepositories(
basePackages = "com.sample.repo.test1",
cassandraTemplateRef = "test1Template"
)
public class Test1Config extends CassandraBaseConfig {

@Override
@Primary
@Bean(name = "test1Template")
public CassandraAdminOperations cassandraTemplate() throws Exception {
return new CassandraAdminTemplate(session().getObject(), cassandraConverter());
}

@Override
@Bean(name = "test1Session")
public CassandraSessionFactoryBean session() throws Exception {

CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();

session.setCluster(cluster().getObject());
session.setConverter(cassandraConverter());
session.setKeyspaceName(getKeyspaceName());
session.setSchemaAction(getSchemaAction());
session.setStartupScripts(getStartupScripts());
session.setShutdownScripts(getShutdownScripts());

return session;
}
}

4) test2 相同,只是使用不同的包 包 com.sample.repo.test2;

5) 将每个 key 空间的 repo 放在专用包中即

package com.sample.repo.test1;

@Repository
public interface RepositoryForTest1 extends CassandraRepository<MyEntity> {
// ....
}


package com.sample.repo.test2;

@Repository
public interface RepositoryForTest2 extends CassandraRepository<MyEntity> {
// ....
}

关于java - spring-data-cassandra 存储库的多键空间支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25770043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com