我在我的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 };");
}
}