Spring Boot JPA 2 базы данных - PullRequest
0 голосов
/ 14 декабря 2018

Я использую 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...