Isso é feito facilmente com um ApplicationListener
. Eu fiz isso funcionar ouvindo 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
}
}
Ouvintes de aplicativos são executados de forma síncrona no Spring. Se você deseja garantir que seu código seja executado apenas uma vez, mantenha algum estado em seu componente.
ATUALIZAR
A partir do Spring 4.2+, você também pode usar a @EventListener
anotação para observar o ContextRefreshedEvent
(obrigado a @bphilipnyc por apontar isso):
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
}
}