gpt4 book ai didi

cassandra - 如何使用 Spring boot 初始化 Cassandra 键空间和表

转载 作者:行者123 更新时间:2023-12-03 01:26:48 25 4
gpt4 key购买 nike

我在 Spring boot 应用程序中使用 Cassandra 作为数据源,并希望在应用程序启动之前初始化数据库。

到目前为止,我所做的是,我定义了一个扩展“AbstractCassandraConfiguration”类的“CassandraConfiguration”类,如下面的示例所示,并且我有一个扩展“CassandraRepository”的存储库。当我自己创建键空间和表时,应用程序运行良好。

但是,我想在应用程序启动时自动创建键空间和表。为了做到这一点,我在资源文件夹下提供了一个 schema.cql 文件,但我无法使该脚本工作。

有人知道我可以做什么来自动创建键空间和表吗?

谢谢。

编辑:我正在使用 Cassandra 2.0.9、spring-boot 1.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;
}
}

最佳答案

如果您仍然遇到问题,在 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" };
}

你可以走了

关于cassandra - 如何使用 Spring boot 初始化 Cassandra 键空间和表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35146744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com