簡體   English   中英

如果鍵空間不存在,Cassandra連接到集群

[英]Cassandra connect to cluster if keyspace does not exists

當鍵空間不存在時,我無法連接到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屬性自動裝配屬性?

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

例如,如果您創建了@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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM