Esto se hace fácilmente con un ApplicationListener
. Llegué a esto escuchando Spring's 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
}
}
Los escuchas de aplicaciones se ejecutan sincrónicamente en Spring. Si desea asegurarse de que su código se ejecute solo una vez, solo mantenga algún estado en su componente.
ACTUALIZAR
Comenzando con Spring 4.2+ también puede usar la @EventListener
anotación para observar el ContextRefreshedEvent
(gracias a @bphilipnyc por señalar esto):
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
}
}