如果键空间不存在,Cassandra将连接到群集

时间:2016-07-15 09:14:45

标签: java cassandra

当keypace不存在时,我遇到连接cassandra的问题。 我不想在应用程序中对键空间进行硬编码。我想在application.yml中写密钥空间名称(我使用的是spring boot)。我想创建与键空间关联的会话:

session = cluster.connect("keyspace");

我必须这样做,因为我无法在@Accessor界面中使用自动安装的属性。

@Accessor
public interface PropertyAccessor {

    //cannot autowire this field
    @Value("${database.keyspace}")
    String keyspace = "";

所以我的问题是:

  1. 如果键空间不存在,如何连接到cassandra集群并获取与键空间的会话对象关联?

  2. 如何在@Accessor界面中从spring属性自动装配属性?

  3. PS。我正在使用casandra 3.7,所以我不能使用spring-data-cassandra。

1 个答案:

答案 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;