Ошибка создания bean-компонента с именем cassandraSession при настройке настраиваемого CassandraConfig (для jpa), расширяющего AbstractCassandraConfiguration
У меня 2 проекта (родитель-ребенок). В родительском (весеннем) проекте настроен bean-компонент Cassandra CqlSession:
//package com.soumav.commonfw.configurations.cassandra
@Bean(name = "astraCassandraCqlSession")
@Primary
public CqlSession cqlSession() throws BusinessException {
CqlSession session = null;
try {
session = CqlSession.builder()
.withCloudSecureConnectBundle(Paths.get(ClassLoader.getSystemResource(astraConfigzipPath).toURI()))
.withAuthCredentials(clientId, clientSecret).build();
} catch (URISyntaxException e) {
log.error("Error Occured: {}", e.toString());
throw new BusinessException(e.toString(), HttpStatus.INTERNAL_SERVER_ERROR);
} catch (Exception e) {
log.error("Error Occured: {}", e.toString());
throw new BusinessException(e.toString(), HttpStatus.INTERNAL_SERVER_ERROR);
}
return session;
}
Я добавляю родительский (весенний) проект в качестве зависимости (maven) к дочернему (весеннему) проекту, и здесь я использую Spring-Data-JPA. Когда я настраиваю конфигурации cassandra в дочернем элементе как:
//package com.soumav.test.astracassandraapp.config
@Configuration
@EnableCassandraRepositories(basePackages = "com.soumav.test.astracassandraapp.*")
public class TestCassandraConfig extends AbstractCassandraConfiguration {
@Value("${cassandra.keyspacename}")
String keyspacename;
@Autowired
@Qualifier("astraCassandraCqlSession")
CqlSession session;
@Override
protected CqlSession getRequiredSession() {
return this.session;
}
@Override
public String getKeyspaceName() {
return keyspacename;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.CREATE_IF_NOT_EXISTS;
}
@Bean
public CassandraAdminTemplate cassandraTemplate() {
session.setSchemaMetadataEnabled(false);
return new CassandraAdminTemplate(session);
}
@Bean
public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
return new CassandraMappingContext();
}
}
Мой класс приложения Spring-Boot(дочерний):
//package com.soumav.test.astracassandraapp
@SpringBootApplication(exclude = { CassandraAutoConfiguration.class,
CassandraDataAutoConfiguration.class }, scanBasePackages = "com.soumav.*")
public class TestAstraCassandraApplication {
public static void main(String[] args) {
SpringApplication.run(TestAstraCassandraApplication.class, args);
}
}
Интерфейс репо (дочерний):
//package com.soumav.test.astracassandraapp.repo
@Repository
public interface TestRepo extends CassandraRepository<Student, Integer> {
}
Когда я запускаю дочерний проект, я получаю исключение:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [com/soumav/test/astracassandraapp/config/TestCassandraConfig.class]: Invocation of init method failed; nested exception is com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors() for more): Node(endPoint=localhost:9042, hostId=null, hashCode=6a571b5d): [com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s1|control|connecting...] Protocol initialization request, step 1 (OPTIONS): failed to send request (io.netty.channel.StacklessClosedChannelException)]
Зависимости были правильно импортированы (дерево mvn). Что еще мне нужно переопределить в настраиваемой конфигурации cassandra дочернего проекта?