How to start cron job after server startup automatically
In some cases, it is required to run cron job immediately after server starts
We have a property in hybris to start all cron jobs after server startup but to make a specific cron job to run after server startup, we don’t have any such property
Let’s see how can we achieve the same
We need to implement ServletContextListner interface and write the code to execute specific cron job on server start up
Create a java class by implementing ServletContextListner interface
- Package com.kb.listener;
- public class CronjobContextListener implements ServletContextListener {
- @Override
- public void contextDestroyed(ServletContextEvent arg0) {
- //Code can be written to execute before server shuts down.
- }
- @Override
- public void contextInitialized(ServletContextEvent arg0) {
- // Write a code that needs to be executed just after the server starts
- ProductsRemovalCronJobModel productsRemovalCronJobModel =modelService.create(ProductsRemovalCronJobModel.class);
- // assign Job to CronJob
- ServicelayerJobModel servicelayerJobModel = modelService.create(ServicelayerJobModel.class);
- servicelayerJobModel.setActive(true);
- servicelayerJobModel.setSpringId("productsRemovalJob");
- productsRemovalCronJobModel.setJob(servicelayerJobModel);
- modelService.save(productsRemovalCronJobModel);
- cronJobService.performCronJob(productsRemovalCronJobModel);
- }
- }
Package com.kb.listener; public class CronjobContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { //Code can be written to execute before server shuts down. } @Override public void contextInitialized(ServletContextEvent arg0) { // Write a code that needs to be executed just after the server starts ProductsRemovalCronJobModel productsRemovalCronJobModel =modelService.create(ProductsRemovalCronJobModel.class); // assign Job to CronJob ServicelayerJobModel servicelayerJobModel = modelService.create(ServicelayerJobModel.class); servicelayerJobModel.setActive(true); servicelayerJobModel.setSpringId("productsRemovalJob"); productsRemovalCronJobModel.setJob(servicelayerJobModel); modelService.save(productsRemovalCronJobModel); cronJobService.performCronJob(productsRemovalCronJobModel); } }
configure above context listener class in storefront extension’s web.xml as below
- <listener>
- <listener-class>
- com.kb.listener.CronjobContextListener
- </listener-class>
- </listener>
<listener> <listener-class> com.kb.listener.CronjobContextListener </listener-class> </listener>
Now whenever server starts, immediately above cron job executes.
Note :
Please check CronJob article for how to create cron job
We can also override contextInitialized() method inside existing hybris context listener HybrisStorefrontContextLoaderListener instead of creating new one but we should not forget calling super.contextInitialized(event);
Hi Kb,
Is in this case maxAcceptabledelay( while we mention trigger , in the impex) does not require.?
If maxAcceptabledelay is “-1” . Then is it not require for custom listener.?