在运行时创建Spring.Data.Cassandra键空间

时间:2019-01-23 09:29:51

标签: spring-boot cassandra spring-data-cassandra

我在Spring Boot应用程序中使用Cassandra。当我启动应用程序时,会自动创建密钥空间,并且一切正常。问题是我想在运行时创建键空间。例如,从端点或从application.properties。我只尝试过@RefreshScope,之后尝试过

  

spring.cloud.refresh.extra-refreshable = spring.data.cassandra.keyspace-name

,并在执行器/刷新上发送POST,但两种解决方案均不起作用。该类是带有@Table批注的简单Person类。

所以我的问题是:向执行器/刷新发送请求后,是否可以在运行时创建键空间?

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>

这就是我在application.properties中拥有的

#spring.data.cassandra.keyspace-name=test1_keyspace
#spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS
#spring.data.cassandra.contact-points=IP

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式实现:

@Component
class MySessionRefresh {

  @Autowired
  Environment env;

  @Autowired
  Session session;

  // omitted constructors for brevity

  @EventListener
  @Order(Ordered.LOWEST_PRECEDENCE)
  public void handle(RefreshScopeRefreshedEvent event) {

    String keyspace = env.getProperty("spring.data.cassandra.keyspace-name");
    session.execute("CREATE KEYSPACE IF NOT EXISTS " + keyspace + " WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 };");
  }
}