Это легко сделать с помощью ApplicationListener
. Я получил это на работу, слушая Spring ContextRefreshedEvent
:
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
// do whatever you need here
}
}
Слушатели приложений работают синхронно в Spring. Если вы хотите убедиться, что ваш код выполняется только один раз, просто сохраните некоторое состояние в вашем компоненте.
ОБНОВИТЬ
Начиная с Spring 4.2+, вы также можете использовать @EventListener
аннотацию для наблюдения ContextRefreshedEvent
(спасибо @bphilipnyc за это):
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class StartupHousekeeper {
@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() {
// do whatever you need here
}
}