Я использую hibernate, весеннюю загрузку, jpa. Первая БД - MS SQL.Новым требованием является подключение Oracle JDBC. Это многомодульное приложение.В основном модуле у меня есть файл application-remote.yml с учетными данными БД.Вот оно
spring:
datasource:
driver-class-name:com.microsoft.sqlserver.jdbc.SQLServerDriver
url: ************
username: *****
password: *****
secondDatasource:
driver-class-name: oracle.jdbc.OracleDriver
url: ***********
username: ******
password: ******
jpa:
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
properties:
dialect: org.hibernate.dialect.SQLServer2012Dialect
jackson:
date-format: com.fasterxml.jackson.databind.util.StdDateFormat
logging:
config: classpath:logback-remote.xml
file: /usr/share/tomcat/pqa.log
Конфигурация My Application в модуле app, com.my.project
@Configuration
@Import({
ControllerConfig.class,
PersistenceConfig.class
})
public class ApplicationConfig {
}
Моя постоянная настройка в постоянстве модуля com.my.project
@Configuration
public class PersistenceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix="spring.secondDatasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
У меня много сущностей в персистенции. Com.my.project.entity. Одна из них -
@Data
@Entity
@Builder
@Table(name = "locationSelection", schema = "dbo")
public class Location {
@Id
@Column(name = "timerName")
private String timerName;
@Column(name = "center")
private String center;
@Column(name = "station")
private String station;
@Column(name = "cell")
private String cell;
@Column(name = "place")
private String place;
}
Хранилище для нее в персистенции, com.my.project.repository
@Repository
public interface LocationRepository extends JpaRepository<Location, String> {}
И для 2-й базы данных в Persistence com.my.project.entityForIntegration
@Data
@Builder
@Entity
@Table(name = "PQA_IN")
public class Pqa_In {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private int id;
@Column(name = "STATUS")
private String status;
@Column(name = "UPD_USER")
private String upd_user;
@Column(name = "UPD_DATE")
private Timestamp upd_date;
@Column(name = "INS_USER")
private String ins_user;
@Column(name = "INS_DATE")
private Timestamp ins_date;
}
И хранилище в com.my.project.repositoryForIntegration
public interface Pqa_In_repository extends JpaRepository<Pqa_In, Long> {
}
Теперь это не работает.У меня много ошибок, с классами и конфигами выше ошибка:
*************************** ПРИМЕНЕНИЕНе удалось запустить *************************** Описание: параметр 0 конструктора в com.my.project.services.impl.AnomaliesServiceImpl требуется abean-компонент типа 'com.my.project.repository.AnomaliesRepository', который не может быть найден.Действие: рассмотрите возможность определения bean-компонента типа com.my.project.repository.AnomaliesRepository в вашей конфигурации.
Я прочитал документацию Spring, baeldung, stackoverflow и другие сайты с руководствами и вопросами о нескольких источниках данных, но я ничего не могу сделать.Пожалуйста, предоставьте мне правильное решение для подключения 2 БД.
AnomaliesServiceImpl
@Service
@Slf4j
public class AnomaliesServiceImpl implements AnomaliesService {
private AnomaliesRepository anomaliesRepository;
@Autowired
public AnomaliesServiceImpl(AnomaliesRepository anomaliesRepository) {
//
this.anomaliesRepository = anomaliesRepository;
}
@Override
public ResponseEntityDTO getAllAnomalies(int currentPageNumber, int pageSize) {
Page<WeldMeasureProt> page = anomaliesRepository.findAllAnomalies(pageable);
return convertToWeldMeasureProtDTO(page, currentPageNumber);
}
AnomaliesRepository
@Repository
public interface AnomaliesRepository extends PagingAndSortingRepository<WeldMeasureProt, WeldMeasurePointPrimaryKey> {
@Query("from WeldMeasureProt wm where wm.detection<>0 " +
"and wm.uirQStoppActCntValue=0 " +
"and wm.monitorState=0 ")
Page<WeldMeasureProt> findAllAnomalies(Pageable pageable);
}