当keypace不存在时,我遇到连接cassandra的问题。 我不想在应用程序中对键空间进行硬编码。我想在application.yml中写密钥空间名称(我使用的是spring boot)。我想创建与键空间关联的会话:
session = cluster.connect("keyspace");
我必须这样做,因为我无法在@Accessor界面中使用自动安装的属性。
@Accessor
public interface PropertyAccessor {
//cannot autowire this field
@Value("${database.keyspace}")
String keyspace = "";
所以我的问题是:
如果键空间不存在,如何连接到cassandra集群并获取与键空间的会话对象关联?
如何在@Accessor界面中从spring属性自动装配属性?
PS。我正在使用casandra 3.7,所以我不能使用spring-data-cassandra。
答案 0 :(得分:0)
例如,如果您创建了使用@Accessor
注释的CustomAccessorRepository@Accessor
public interface CustomAccessorRepository {
@Query("select from custom where id=':id')
CustomObject findById(@Param("id") String id);
}
您可以创建一些类并使用@Configuration注释它,在此类中创建一个返回您的访问者的@Bean
@Configuration
public class CassandraConfig {
private Cluster cluster;
private Session session;
private MappingManager mappingManager;
@Value("${database.keyspace}")
private String keyspace;
public CassandraConfig(){
cluster = Cluster.builder()
.addContactPoints(nodes.split(","))
.withPort(port)
.build();
session = cluster.connect(keyspace)
mappingManager = new MappingManager(session);
}
@Bean
public CustomAccessorRepository customAccessorRepository(){
return mappingManager.createAccessor(CustomAccessorRepository.class);
}
}
在此之后,您可以将访问者注入某些服务
@Autowired
private CustomAccessorRepository customAccessorRepository;