2016-07-15 66 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

你为什么这么认为? –

相关问题