gpt4 book ai didi

java - 如何在 java Springboot WebFlux 中使用响应式(Reactive) Cassandra 存储库与多个键空间交互?

转载 作者:行者123 更新时间:2023-12-03 17:23:06 24 4
gpt4 key购买 nike

我正在尝试连接到两个不同的 响应式(Reactive) 键空间取决于传入的 http 请求。
该请求将包含一些信息,用于业务逻辑/服务层从键空间 A 或键空间 B(通过调用 ReactiveARepository 或 ReactiveBRepository)检索数据,以获取相应的数据。
简单的 if 语句不是解决方案,因为它需要使用正确的响应式(Reactive)存储库以及相应的响应式(Reactive)配置、响应式(Reactive)模板等……
在存储库层,非常简单,甚至不使用任何自定义查询。我什至将存储库放在各自的包中。

package com.cassandra.repository.a;

@Repository
public interface ReactiveARepository extends ReactiveCassandraRepository<MyPojo, String> {

package com.cassandra.repository.b;

@Repository
public interface ReactiveBRepository extends ReactiveCassandraRepository<MyPojo, String> {
@Configuration
@EnableReactiveCassandraRepositories
public class AandBcommonCassandraConfiguration extends AbstractReactiveCassandraConfiguration {

//the @Value private String for contactPoints, keyspace, datacenter, port, username and password

@Bean
@NonNull
@Override
public CqlSessionFactoryBean cassandraSession() {
final CqlSessionFactoryBean cqlSessionFactoryBean = new CqlSessionFactoryBean();
cqlSessionFactoryBean.setContactPoints(contactPoints);
cqlSessionFactoryBean.setKeyspaceName(keyspace);
cqlSessionFactoryBean.setLocalDatacenter(datacenter);
cqlSessionFactoryBean.setPort(port);
cqlSessionFactoryBean.setUsername(username);
cqlSessionFactoryBean.setPassword(passPhrase);
return cqlSessionFactoryBean;
}

@NonNull
@Override
protected String getKeyspaceName() {
return keyspace;
}

@Override
protected String getLocalDataCenter() {
return datacenter;
}

//other getters

我已经尝试过的:
@Configuration
@EnableReactiveCassandraRepositories(basePackages = "com.cassandra.repository.a”, reactiveCassandraTemplateRef = “keyspaceCassandraTemplateA”)
public class AkeyspaceCassandraConfiguration extends BaseCassandraConfiguration {

@Value("${spring.data.cassandra.keyspace-name.keyspaceA}”)
private String keyspace;

@NonNull
@Override
public String getKeyspaceName() {
return keyspace;
}

@NonNull
@Override
public CqlSessionFactoryBean cassandraSession() {
final CqlSessionFactoryBean cqlSessionFactoryBean = super.cassandraSession();
cqlSessionFactoryBean.setKeyspaceName(keyspace);
return cqlSessionFactoryBean;
}

@Bean(“keyspaceCassandraTemplateA”)
public ReactiveCassandraTemplate reactiveCassandraTemplate() {
final ReactiveSession reactiveSession = new DefaultBridgedReactiveSession(cassandraSession().getObject());
return new ReactiveCassandraTemplate(reactiveSession);
}
@Configuration
@EnableReactiveCassandraRepositories(basePackages = "com.cassandra.repository.B”, reactiveCassandraTemplateRef = “keyspaceCassandraTemplateB”)
public class BKeyspaceCassandraConfiguration extends BaseCassandraConfiguration {

@Value("${spring.data.cassandra.keyspace-name.keyspaceB}”)
private String keyspace;

@NonNull
@Override
public String getKeyspaceName() {
return keyspace;
}

@NonNull
@Override
public CqlSessionFactoryBean cassandraSession() {
final CqlSessionFactoryBean cqlSessionFactoryBean = super.cassandraSession();
cqlSessionFactoryBean.setKeyspaceName(keyspace);
return cqlSessionFactoryBean;
}

@Bean("keyspaceCassandraTemplateB")
public ReactiveCassandraTemplate reactiveCassandraTemplate() {
final ReactiveSession reactiveSession = new DefaultBridgedReactiveSession(cassandraSession().getObject());
return new ReactiveCassandraTemplate(reactiveSession);
}
但是,它仅指向键空间 A。
请问在 Cassandra 中使用两个键空间的响应式(Reactive)应用程序的正确方法是什么?

最佳答案

这可能不是您正在寻找的答案,但是在 Spring Data JPA 中,您可以通过为每个数据源配置单独的 EntityManagerFactory 和 PlatformTransactionManager bean 来实现连接到不同实体集的多个数据库。
Examples
哼!

关于java - 如何在 java Springboot WebFlux 中使用响应式(Reactive) Cassandra 存储库与多个键空间交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65115576/

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