Я использую Cassandra в качестве источника данных в моем приложении загрузки Spring и хотел бы инициализировать базу данных до запуска приложения.Как инициализировать пространство ключей и таблицы Cassandra с загрузкой Spring
До сих пор, что я сделал, я определил класс «CassandraConfiguration», расширяющий класс AbstractCassandraConfiguration, как в примерах, которые вы видите ниже, и у меня есть репозиторий, расширяющий «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;
}
}
С пружинной загрузкой 1.3 конфигурацией намного проще, увидеть это: http://flnjworkingnotes.blogspot.com/2016/01/tutorial-connecting-to-cassandra -using.html, например. – jny
Моя проблема заключается не в сопоставлении объектов, а в создании таблиц автоматически, если таблица не существует заранее. – frkn