Инициализация базы данных перед созданием bean-компонента

Я создаю приложение таймера, которое использует Quartz, а также использую Spring для инициализации моей БД из файла schema.sql. Когда приложение запускается, я хочу, чтобы БД была инициализирована до создания моего компонента планировщика.

@Bean
public Scheduler scheduler() throws SchedulerException {
    Scheduler scheduler;
    final StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory("application.properties");
    stdSchedulerFactory.initialize();
    scheduler = stdSchedulerFactory.getScheduler();
    scheduler.start();
    return scheduler;
}

Компонент Scheduler находится внутри TimerConfiguration.java, который добавляется в TimerApplication, например

@SpringBootApplication
@Import({TimerConfiguration.class})
открытый класс TimerApplication {

Есть ли способ добиться этого?


person mirzak    schedule 01.12.2016    source источник
comment
Я думаю, что @PostConstruct и @DependsOn могли бы вам помочь   -  person Patrick    schedule 01.12.2016


Ответы (1)


Аннотация @DependsOn указывает компонент, который должен быть инициализирован после инициализации другого компонента.

Рекомендуется установить имя ожидающего компонента в качестве значения в аннотации.

В вашем случае это @DependsOn("datasource").

Дополнительная информация из документов:

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

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

person Patrick    schedule 01.12.2016