BeanCreationException для Flyway настроен для Postgres

Когда я пытаюсь создать модуль репозитория, я получаю исключение BeanCreationException для конфигурации Flyway. Пробовал несколько способов, но не повезло. Может кто-нибудь, пожалуйста, помогите мне в этом?

Ошибка:

Ошибка запуска ApplicationContext. Чтобы отобразить отчет об автоматической настройке, повторно запустите приложение с включенной отладкой. 2019-03-21 06:11:15.404 ОШИБКА 13480 --- [основная] o.s.boot.SpringApplication: сбой запуска приложения org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «flyway», определенным в com.repository.TestConfig: создание экземпляра bean-компонента с помощью фабричного метода не удалось; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.flywaydb.core.Flyway]: фабричный метод 'flyway' вызвал исключение; вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «dataSource»: не удалось вызвать метод инициализации; вложенным исключением является java.lang.IllegalStateException: не удалось заменить DataSource встроенной базой данных для тестов. Если вам нужна встроенная база данных, поместите поддерживаемую в путь к классам или настройте атрибут замены @AutoconfigureTestDatabase.

Класс TestConfig:

@Configuration
@EnableJpaRepositories(basePackages = "com.repository")
@EntityScan(basePackages = {"com.insurance.*"})
@EnableTransactionManagement
@Slf4j
public class TestConfig {
@Bean
public DataSource dataSource() throws IOException {
    return embeddedPostgres().getPostgresDatabase();
}

@Bean
public EmbeddedPostgres embeddedPostgres() throws IOException {
    return EmbeddedPostgres.start();
}

@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator() {
    return new HibernateExceptionTranslator();
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) throws IOException {
    return new JdbcTemplate(dataSource);
}

@Bean
public Flyway flyway() throws IOException {
    Flyway flyway = new Flyway();
    flyway.setDataSource(dataSource());
    flyway.setLocations("db/migration");
    flyway.migrate();
    return flyway;
}
}

фрагмент pom.xml

    <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-pg-embedded</artifactId>
        <version>0.10.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>

Тестовый класс:

@RunWith(SpringRunner.class)
@DataJpaTest
@ContextConfiguration(classes = TestConfig.class)
public class InsuranceRepositoryTest {
---//Test methods 
}

Можете ли вы показать свой тестовый класс, пожалуйста?

Andy Wilkinson 21.03.2019 07:53

Привет Энди Обновил выпуск

Rahul Vel 21.03.2019 08:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
1 011
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring Boot пытается заменить обычную базу данных вашего приложения на ту, которая будет использоваться для тестирования. Однако вы уже сделали это в своей тестовой конфигурации, использующей встроенный Postgres. Вам нужно использовать @AutoConfigureTestDatabase, чтобы сообщить Spring Boot не заменять вашу базу данных:

@AutoConfigureTestDatabase( replace = Replace.NONE

Другие вопросы по теме