создание схемы с помощью весенней загрузки CommandLineRunner - PullRequest
0 голосов
/ 08 февраля 2019

В моем приложении Spring Boot я использую CommandLineRunner для создания новой схемы, после чего они импортируют некоторые тестовые данные.

@Profile("create-schema")
@Component
public class CreateSchema {
    // creating schema inside. This works because I can see from the database
}

@Profile("import-data")
@Component
public class DataImporter {
}

и это последовательность в application.properties

spring.profiles.active=${SPRING_PROFILE}, create-schema, import-data

И использование этого в application.properties

spring.jpa.properties.hibernate.default_schema=simba

Создание схемы начинается после того, как приложениеначалось;и после создания схемы начинается импорт данных.

при выполнении import-data я получаю сообщение об ошибке

schema_name.table_name не существует

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

Я что-то запускаю в неправильном порядке?

1 Ответ

0 голосов
/ 08 февраля 2019

Профили здесь совершенно неактуальны.Вы можете убедиться, что схема создана перед импортом данных, выполнив что-то вроде следующего:

@Component("schemaCreator")
public class SchemaCreator {

    @PostConstruct
    public void initSchema(){

    }
}

Импорт данных можно сделать зависимым от схемы, инициализируемой с помощью аннотации @DependsOn.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/DependsOn.html

Бины, от которых зависит текущий бин.Все указанные bean-компоненты гарантированно создаются контейнером перед этим bean-компонентом.Используется нечасто в тех случаях, когда бин явно не зависит от другого через свойства или аргументы конструктора, а скорее зависит от побочных эффектов инициализации другого бина.

@DependsOn("schemaCreator")
@Component
public class DataImporter {

    @PostConstruct
    public void initData(){

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...