Весенняя загрузка с несколькими источниками данных и в базе данных памяти

Я пытаюсь настроить Spring Boot для работы с несколькими источниками данных. Я следовал инструкциям по настройке двух источников данных и установил один из них основным.

@Configuration
@EnableJpaRepositories(basePackages={"my.postgres.repositories"}
                       entityManagerFactoryRef="postgresEntitymanager"
                       transactionManagerRef="postgresTransactionManager")
public class PgConfig {
@Primary
@Bean(name="postgresDS")
@ConfigurationProperties(prefix="spring.datasource.postgres")
public DataSource postgresDataSource() {
    return DataSourceBuilder.create().build();
}
@Primary
@Bean(name="postgresEntityManager")
public LocalContainerEntityManagerFactoryBean postgresEntityManager(EntityManagerFactoryBuilder builder) {
    return builder.dataSource(postgresDataSource())
            .packages("my.postgres.domain")
            .persistenceUnit("postgresPersistenceUnit")
            .build();
}

@Primary
@Bean(name = "postgresTransactionManager")
public PlatformTransactionManager postgresTransactionManager(
        @Qualifier("postgresEntityManager") EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
}

У меня есть второй класс конфигурации для oracle, который не имеет @Primary аннотации, но очень похож. Я также добавил Это в мой основной класс, чтобы исключить автоматическую конфигурацию источника данных.

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

Проблема, с которой я сталкиваюсь, заключается в том, что эта установка не позволяет моим интеграционным тестам, которые должны выполняться с базой данных H2, открывать соединение.

Caused by: javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection

Caused by: javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Could not open connection
Caused by: org.hibernate.exception.JDBCConnectionException: Could not open connection
Caused by: java.sql.SQLException: The url cannot be null

Я использую отдельное приложение.файл свойств в разделе src / integrationtest / ресурсы, который содержит

spring.jpa.database=H2

Как заставить интеграционные тесты использовать H2 для репозиториев, которые я использую при выполнении тестов?

Если я не включаю свои пользовательские источники данных, все, кажется, работает нормально.

Спасибо

1 ответ

  1. Можно добавить собственную конфигурацию теста с h2базой данных, но использовать другую базу данных в рабочей среде. Вы исключили DataSourceAutoConfigurationиз своего класса приложений spring, но это полезно в интеграционных тестах.

    Одним из простых решений является использование другого класса приложения spring только для интегрирующих тестов без исключения DataSourceAutoConfigurationили просто реализовать свой собственный DataSourceAutoConfigurationи включить его. Вы можете решить, когда ваш собственный DataSourceAutoConfigurationбудет включен или нет в вашей собственной реализации. Например, если есть junitили spring-testсуществует в вашем classpathон будет включен, в противном случае будет отключен. Это требует junitили spring-testне будет включено в производство, которое может быть обработано управлением зависимостями, такими как maven.