在运行时创建spring.data.cassandra键空间

ui7jx7zq  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(344)

我在我的spring boot应用程序中使用cassandra。当我启动应用程序时,按键空间会自动创建,一切正常。问题是我想在运行时创建键空间。例如,从endpoint或application.properties。我只尝试了@refreshscope,之后又尝试了@refreshscope
spring.cloud.refresh.extra refreshable=spring.data.cassandra.keyspace-name
并发送了关于执行器/刷新的帖子,但两种解决方案都不起作用。该类是带有@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
h9vpoimq

h9vpoimq1#

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

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

相关问题