是否可以对Spring-Data使用自定义的datastax会话?
嗨,我知道Cassandra的Spring-Data在内部使用datastax会话。但是,我有一个自定义的datastax会话对象(由另一个服务提供),我希望Spring-Data使用它,而不是预先连接的那个。假设两个datastax会话的版本相同,这可能吗?
发布于 2019-01-13 23:55:41
是的,这是可能的。
根据您的设置,有几种方法。让我解释两个最常见的场景:
模板接口直接使用
Session yourSession = …;
CqlTemplate cqlTemplate = new CqlTemplate(yourSession);
CassandraTemplate cassandraTemplate = new CassandraTemplate(yourSession);将会话公开为 @Bean的
由于配置支持需要使用CassandraSessionFactoryBean和CassandraClusterFactoryBean,因此这可能需要更多的设置。
看看AbstractCassandraConfiguration,看看配置了哪些支持bean (CassandraConverter、CassandraMappingContext)来配置Spring Data的Cassandra支持。
@Configuration
class MyCassandraConfig {
private final Session mySession;
public MyCassandraConfig(Session mySession) {
this.mySession = mySession;
}
@Bean
public CassandraConverter cassandraConverter() {
MappingCassandraConverter mappingCassandraConverter = new MappingCassandraConverter(cassandraMapping());
mappingCassandraConverter.setCustomConversions(customConversions());
return mappingCassandraConverter;
}
@Bean
public CassandraMappingContext cassandraMapping() {
Cluster cluster = mySession.getCluster();
String keyspace = mySession.getLoggedKeyspace();
CassandraMappingContext mappingContext = new CassandraMappingContext(
new SimpleUserTypeResolver(cluster, keyspace), new SimpleTupleTypeFactory(cluster));
CustomConversions customConversions = customConversions();
mappingContext.setCustomConversions(customConversions);
mappingContext.setSimpleTypeHolder(customConversions.getSimpleTypeHolder());
return mappingContext;
}
@Bean
public CustomConversions customConversions() {
return new CassandraCustomConversions(Collections.emptyList());
}
@Bean
public CassandraTemplate cassandraTemplate() {
return new CassandraTemplate(mySession, cassandraConverter());
}
}https://stackoverflow.com/questions/54138703
复制相似问题