2016-07-15 96 views
0

當密鑰空間不存在時,連接到cassandra時出現問題。 我不想在應用程序中對我的密鑰空間進行硬編碼。我想在application.yml中編寫密鑰空間名稱(我正在使用spring引導)。我想與密鑰空間創建關聯會話:如果密鑰空間不存在,Cassandra連接到集羣

session = cluster.connect("keyspace"); 

我必須這樣做,因爲我不能自動裝配在@Accessor接口屬性。

@Accessor 
public interface PropertyAccessor { 

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

所以我的問題是:

  1. 如何連接到卡桑德拉集羣和獲取會話對象關聯與密鑰空間時,密鑰空間不存在?

  2. 如何從@Accessor接口中的spring屬性自動裝配屬性?

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

回答

0

如果創建,例如,您CustomAccessorRepository標註有@Accessor

@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; 
+0

的語句_你不能創建沒有keyspace._的會話是錯誤的。 –

+0

謝謝,是的,我錯了,實際上有可能創建沒有keyspace的會話,但我認爲這是一個不好的做法 –

+0

你爲什麼這麼認爲? –

相關問題