В моем приложении springboot я хочу подключиться к двум источникам данных, базе данных cassandra и базе данных оракула.
Итак, я добавил в свой pom.xml следующее:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
Вот репозиторий для Oracle DB:
import org.springframework.data.jdbc.repository.query.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface TestRepository extends ReadRepository<TestEntity, String> {
@Query("select * from test_table where id = :distributorId fetch first 10 rows only")
List<TestEntity> getResult(@Param("distributorId") String distributorId);
}
ReadRepository расширяет репозиторий
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;
@NoRepositoryBean
public interface ReadRepository<T, ID> extends Repository<T, ID> {}
Что ж, это работает нормально, когда я комментирую зависимость cassandra:
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency> -->
Но в тот момент, когда я добавляю зависимость от cassandra, я начинаю видеть эту ошибку:
***************************
APPLICATION FAILED TO START
***************************
Description:
The bean 'TestRepository', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
В целях отладки я удалил все классы, связанные с cassandra (репозиторий, сущность и т. д.), так что jar cassandra нигде в проекте не импортируется. И, следовательно, сузился до этого как первопричины.
Я понятия не имею, что вызывает эту проблему. Из журнала ошибок кажется, что bean-компонент пытается быть создан дважды или около того. Но почему это возможно?
Если я добавлю свойство, я столкнусь с другой проблемой, которая намекает на то, что cassandra import пытается что-то сделать с testRepository:
spring.main.allow-bean-definition-overriding=true
Error:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testController': Unsatisfied dependency expressed through field 'TestRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'TestRepository': Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cassandraTemplate' defined in class path resource [org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.class]: Unsatisfied dependency expressed through method 'cassandraTemplate' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.class]: Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/0:0:0:0:0:0:0:1:9042 (com.datastax.driver.core.exceptions.TransportException: [localhost/0:0:0:0:0:0:0:1:9042] Cannot connect), localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [localhost/127.0.0.1:9042] Cannot connect))
Может кто-нибудь помочь в этом. Заранее спасибо.
@Table
кTestEntity
? - person Jens Schauder   schedule 08.06.2020import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
@Table("test_tnt")
public class TestEntity{}
- person Somen Biswas   schedule 08.06.2020@Table
. Это пометит их для получения Spring Data JDBC. Это необходимо, когда у вас есть два или более модулей Spring Data. - person Jens Schauder   schedule 09.06.2020