我使用Cassandra作为我的Spring boot应用程序的数据源,并希望在应用程序启动前初始化html" target="_blank">数据库。
到目前为止,我所做的是,我已经定义了一个类“CassandraConfiguration”,扩展了“AbstractCassandraConfiguration”类,如下面的示例所示,我有一个扩展“CassandraRepository”的存储库。当我自己创建键空间和表时,应用程序工作正常。
然而,我希望在应用程序启动时自动创建键空间和表。为此,我提供了一个模式。资源文件夹下的cql文件,但我无法使该脚本工作。
有人知道我该怎么做才能自动创建键空间和表吗?
谢谢。
编辑:我使用的是Cassandra 2.0.9,sping-boot1.3.2.RELEASE和datastax cassandra驱动程序2.1.6版本。
CassandraConfiguration.java
@Configuration
@PropertySource(value = { "classpath:cassandra.properties" })
@EnableCassandraRepositories(basePackages = { "bla.bla.bla.repository" })
public class CassandraConfiguration extends AbstractCassandraConfiguration {
@Autowired
private Environment environment;
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints( environment.getProperty( "cassandra.contactpoints" ) );
cluster.setPort( Integer.parseInt( environment.getProperty( "cassandra.port" ) ) );
return cluster;
}
@Bean
public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
return new BasicCassandraMappingContext();
}
@Bean
public CassandraConverter converter() throws ClassNotFoundException {
return new MappingCassandraConverter(cassandraMapping());
}
@Override
protected String getKeyspaceName() {
return environment.getProperty( "cassandra.keyspace" );
}
@Bean
public CassandraSessionFactoryBean session() throws Exception {
CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
session.setCluster(cluster().getObject());
session.setKeyspaceName(environment.getProperty("cassandra.keyspace"));
session.setConverter(converter());
session.setSchemaAction(SchemaAction.NONE);
return session;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.RECREATE_DROP_UNUSED;
}
}
我正在使用< code > spring-boot 1 . 5 . 10 . release 和< code>cassandra 3.0.16,但是您可以尝试缩减版本。要创建密钥空间,您可以从< code>application.yml或< code > application . properties 导入密钥空间名称。使用< code>@Table注释,您的表应该会自动生成,前提是您已经设置了实体基础包。
@Value("${cassandra.keyspace}")
private String keySpace;
@Override
public String[] getEntityBasePackages() {
return new String[]{"com.example.your.entities"};
}
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
return Arrays.asList(
CreateKeyspaceSpecification.createKeyspace()
.name(keySpace)
.ifNotExists()
);
}
您的返回类型基本卡桑德拉映射上下文() 可能已弃用。用
@Bean
public CassandraMappingContext mappingContext() throws ClassNotFoundException {
CassandraMappingContext mappingContext= new CassandraMappingContext();
mappingContext.setInitialEntitySet(getInitialEntitySet());
return mappingContext;
}
@Override
public String[] getEntityBasePackages() {
return new String[]{"base-package name of all your entity, annotated
with @Table"};
}
@Override
protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
return CassandraEntityClassScanner.scan(getEntityBasePackages());
}
而不是,
@Bean
public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
return new BasicCassandraMappingContext();
}
还设置:
session.setSchemaAction(SchemaAction.RECREATE_DROP_UNUSED);
和排除:
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.RECREATE_DROP_UNUSED;
}
在此处获取参考。
如果你仍然有这个问题,在Spring Boot 2和SD Cassandra 2.0.3中,你可以做这个简单的Java配置,设置一切开箱即用。
@Configuration
@EnableCassandraRepositories(basePackages = "com.example.repository")
public class DbConfigAutoStart extends AbstractCassandraConfiguration {
/*
* Provide a contact point to the configuration.
*/
@Override
public String getContactPoints() {
return "exampleContactPointsUrl";
}
/*
* Provide a keyspace name to the configuration.
*/
@Override
public String getKeyspaceName() {
return "exampleKeyspace";
}
/*
* Automatically creates a Keyspace if it doesn't exist
*/
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
CreateKeyspaceSpecification specification = CreateKeyspaceSpecification
.createKeyspace("exampleKeyspace").ifNotExists()
.with(KeyspaceOption.DURABLE_WRITES, true).withSimpleReplication();
return Arrays.asList(specification);
}
/*
* Automatically configure a table if doesn't exist
*/
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
/*
* Get the entity package (where the entity class has the @Table annotation)
*/
@Override
public String[] getEntityBasePackages() {
return new String[] { "com.example.entity" };
}
你可以走了
当云联壹云的First Node部署成功后,用户可根据使用场景快速引导配置云联壹云平台。 设置管理员用户 当First Node节点部署完成后,用户在浏览器中输入First Node节点的IP地址,如提示“您的连接不是私密连接”,请单击 “高级” 按钮,并单击“继续前往x.x.x.x(不安全)”,打开云管平台控制台。 在管理员注册页面,设置管理员账号、密码,单击 “注册” 按钮,创建管理员用户。
我试图初始化一个< code>constexpr引用,但没有成功。我试过了 但我收到了编译时错误 错误:constexpr变量“z”必须由常量表达式初始化 删除< code>const会导致 错误:将对类型“int”的引用绑定到类型“const int”的值会删除限定符 尽管我感觉< code>constexpr自动暗示变量声明的< code>const。 所以我的问题是: < Li > < co
问题内容: 我有一个卡桑德拉1.1.2安装我的系统为单节点集群上有三个keyspaces: ,和。我想尽可能地转储keyspace模式及其列族数据,并在其他Cassandra集群上恢复转储。谁能详细建议我该怎么做? 问题答案: 您可以使用和cassandra工具 退房Datastax 文档上相同,这也 您始终可以在文件中执行cassandra-cli命令 您可以将所有create语句加载到文件中并
问题内容: 在将java.util.Date变量初始化为空时,我需要您的帮助。当我运行页面时,如果我没有选择任何日期,它将显示nullpointerexception。 代码是: 我试图使该变量为空,但是它不起作用> 但是,使用初始化: 上面的代码会给我一个我不想要的默认值。 问题答案: java.util.Date的 实例存储一个日期。那么,如何在其中什么也不存储呢?它只能存储对实例的引用。如果
使用Cassandra,我想使用spring boot应用程序动态地创建键空间和表。我正在使用基于Java的配置。 我有一个用@table注释的实体,我想在应用程序启动之前创建它的模式,因为它有预先已知的固定字段。 但是,根据登录的用户,我还希望为这些用户动态创建额外的表,并能够将条目插入到这些表中。 有没有人可以指导我一些我可以利用的资源,或者指出我如何解决这些问题的正确方向。非常感谢你的帮助!
在Cassandra中,“”命令用于从Cassandra中删除所有数据,列族,用户定义的类型和索引的键空间。 Cassandra在删除键空间之前,先获取键空间的快照。 如果Cassandra中不存在keyspace,Cassandra将返回错误,除非使用关键字。 语法 示例: 我们举一个例子来删除名为“”的键空间(keyspace)。 验证: 在执行上述命令后,从Cassandra中删除键空间“”