Создать пространство ключей Spring.Data.Cassandra во время выполнения - PullRequest
0 голосов
/ 23 января 2019

Я использую Cassandra в своем приложении Spring Boot. Когда я запускаю приложение, пространство ключей создается автоматически, и все в порядке. Проблема в том, что я хочу создать пространство ключей во время выполнения. Например, из конечной точки или из application.properties. Я пробовал только с @RefreshScope и после этого с

spring.cloud.refresh.extra-обновляемым = spring.data.cassandra.keyspace имя

и отправил POST на привод / обновление, но оба решения не работают. Класс - это простой класс Person с аннотацией @Table.

Итак, мой вопрос: возможно ли создать пространство клавиш во время выполнения после отправки запроса в привод / обновление ???

<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 голосов
/ 23 января 2019

Вы можете достичь этого с помощью:

@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 };");
  }
}
...