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



我在我的Spring Boot应用程序中使用Cassandra。当我启动应用程序时,密钥空间会自动创建,一切正常。问题是我想在运行时创建密钥空间。例如,从端点或从应用程序属性。我只尝试过@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>

这就是我在应用程序属性中所拥有的

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

你可以通过这个来实现这一点:

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

相关内容

  • 没有找到相关文章

最新更新