2016-12-01 2 views
1

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

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

Планировщик фасоли внутри TimerConfiguration.java который добавляется к TimerApplication как

@SpringBootApplication
@import ({TimerConfiguration.class})
общественного класса TimerApplication {

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

+1

Я думаю, что '@ PostConstruct' или' @ DependsOn' может вам помочь – Patrick

ответ

2

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

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

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

Больше информации из документации:

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

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

Смежные вопросы