在运行时创建 Spring.Data.Cassandra 个键空间
Create Spring.Data.Cassandra keyspace in runtime
我在 Spring 启动应用程序中使用 Cassandra。当我启动应用程序时,键空间会自动创建,一切正常。问题是我想在运行时创建键空间。例如来自端点或来自 application.properties。我只尝试使用@RefreshScope,然后使用
spring.cloud.refresh.extra-refreshable=spring.data.cassandra.keyspace-name
并在 actuator/refresh 上发送了 POST,但这两种解决方案均无效。 Class 是带有 @Table 注释的简单 Person class。
所以我的问题是:是否可以在向 actuator/refresh 发送请求后在运行时创建密钥空间???
<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
你可以这样实现:
@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 };");
}
}
我在 Spring 启动应用程序中使用 Cassandra。当我启动应用程序时,键空间会自动创建,一切正常。问题是我想在运行时创建键空间。例如来自端点或来自 application.properties。我只尝试使用@RefreshScope,然后使用
spring.cloud.refresh.extra-refreshable=spring.data.cassandra.keyspace-name
并在 actuator/refresh 上发送了 POST,但这两种解决方案均无效。 Class 是带有 @Table 注释的简单 Person class。
所以我的问题是:是否可以在向 actuator/refresh 发送请求后在运行时创建密钥空间???
<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
你可以这样实现:
@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 };");
}
}