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