我有一个带有springcassandra的SpringBoot2项目,我正在使用@RefreshScope在运行时创建密钥空间,并且我正在执行查询以使用该密钥空间,但模式不是从带有@Table注释的实体创建的。
当我启动应用程序时,如果不存在,就会创建一个新的键空间,并创建模式。之后,我更改app.properties中的keyspace,并向actuator/refresh发送POST请求。新的键空间被创建并被使用,但是模式不是在该键空间中创建的。
这是我的Cassandra配置:
@Configuration
@EnableCassandraRepositories
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${cassandra.port}")
private int cassandraPort;
@Value("${cassandra.keyspace}")
private String KEYSPACE;
@Value("${cassandra.contactpoints}")
private String NODES;
@Bean
@Override
public CassandraCqlClusterFactoryBean cluster() {
CassandraCqlClusterFactoryBean bean = new CassandraCqlClusterFactoryBean();
bean.setKeyspaceCreations(getKeyspaceCreations());
bean.setContactPoints(NODES);
bean.setPort(cassandraPort);
return bean;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Override
protected String getKeyspaceName() {
return KEYSPACE;
}
@Override
protected String getContactPoints() {
return NODES;
}
@Override
protected int getPort() {
return cassandraPort;
}
@Override
public String[] getEntityBasePackages() {
return new String[] {"package.entities"};
}
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
List<CreateKeyspaceSpecification> createKeyspaceSpecifications = new ArrayList<>();
createKeyspaceSpecifications.add(getKeySpaceSpecification());
return createKeyspaceSpecifications;
}
// Below method creates "keyspace" if it doesn't exist.
private CreateKeyspaceSpecification getKeySpaceSpecification() {
DataCenterReplication dcr = DataCenterReplication.of("datacenter1", 3L);
return CreateKeyspaceSpecification.createKeyspace(KEYSPACE)
.ifNotExists()
.withNetworkReplication(dcr);
}
}
这是RefreshScope类:
@Component
class MySessionRefresh extends AbstractCassandraConfiguration{
@Autowired
Environment env;
@Autowired
Session session;
@EventListener
@Order(Ordered.HIGHEST_PRECEDENCE)
public void handle(RefreshScopeRefreshedEvent event) {
String keyspace = env.getProperty("cassandra.keyspace");
session.execute("CREATE KEYSPACE IF NOT EXISTS " + keyspace + " WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 };");
session.execute("USE " + keyspace + " ;");
}
为了在运行时为新的键空间从带有@Table的实体自动创建模式,我还需要做什么?
在Spring数据中,卡桑德拉的架构创建与会话工厂(卡桑德拉塞森工厂豆
)相关联,密钥空间创建与集群
实例(卡桑德拉集群工厂豆
)相关联。您需要在两家工厂都投入@RefreshScope
。
请记住,刷新会中断您的Cassandra操作。您还应该注意到,模式创建不是为了生产使用。它的设计考虑了集成测试和快速应用程序开发。
我知道这是一个可怕的黑客行为,但我需要编辑一个外部库以符合我们项目的需要。我正在更改的项目将类映射存储到所述类的实例。这个项目的初衷是不可能有重复的类,但我需要它们。我的解决方案是对每个相关对象应用一个UniqueClass字段,然后每个对象都有一个对我需要创建其实例的类的引用。这样,UniqueClass是什么其实根本不重要,只是它是唯一的。 现在,我需要一种方法在运行时创建一个唯一的类来存储在
我使用的是spring数据。下面是我的配置类。我的期望是,当spring boot应用程序加载时,它必须连接到Cassandra并创建密钥空间。但我的应用程序能够连接到Cassandra,但它没有创建密钥空间。我在启动时收到以下异常。如果我遗漏了什么,请告诉我。 通过构造函数参数5表示的未满足依赖关系;嵌套的异常是org。springframework。豆。工厂BeanCreationExcept
我在访问另一个命名空间中存在的服务时遇到问题。 我有两个名称空间(在同一个集群中)airflow-dev和dask-dev。 在dask-dev名称空间中,我部署了dask集群(dask调度器和工作器)。此外,还为dask-scheduler pod创建了一个服务(集群IP)。我可以使用“kubectl port-forward”命令从chrome访问dask-scheduler pod。 然而,
主要内容:什么是键空间(Keyspace)?,Cassandra Keyspace的不同组件Cassandra查询语言(CQL)可帮助开发人员与Cassandra沟通交互。 Cassandra查询语言的语法与SQL非常相似。 什么是键空间(Keyspace)? 键空间()是用于保存列族,用户定义类型的对象。 键空间(Keyspace)就像RDBMS中的数据库,其中包含列族,索引,用户定义类型,数据中心意识,键空间(Keyspace)中使用的策略,复制因子等。 在Cassandra中,“”
问题内容: 现在我用 但这有点棘手。是否有“标准”方法在Node.js中创建空文件? 问题答案: 如果要强制文件为空,则要改用标志: 如果文件存在,它将截断文件,如果文件不存在,则将创建文件。 如果不需要返回的文件描述符,则将其包装在调用中。