Scheduler Job using Java8, Better than TimerJob


import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.web.context.support.WebApplicationContextUtils;

@WebListener
public class BackgroundJobManager implements ServletContextListener {

private ScheduledExecutorService scheduler;

@Override
public void contextInitialized(ServletContextEvent event) {

LocalDateTime localNow = LocalDateTime.now();
ZoneId currentZone = ZoneId.of("America/New_York");

ZonedDateTime zonedNow = ZonedDateTime.now(currentZone);

ZonedDateTime zonedNext1030AM = zonedNow.withHour(11).withMinute(49).withSecond(0);
ZonedDateTime zonedNext630PM = zonedNow.withHour(11).withMinute(50).withSecond(2);

System.out.println(zonedNow);
System.out.println(zonedNext1030AM);
System.out.println(zonedNext630PM);
System.out.println(localNow);

Duration duration1030AM = Duration.between(zonedNow, zonedNext1030AM);
long initalDelay1030AM = duration1030AM.getSeconds();

Duration duration630PM = Duration.between(zonedNow, zonedNext630PM);
long initalDelay630PM = duration630PM.getSeconds();

scheduler = Executors.newScheduledThreadPool(2);

XYZ object = (XYZ) WebApplicationContextUtils
.getRequiredWebApplicationContext(event.getServletContext()).getBean("XYZ");

scheduler.scheduleAtFixedRate(object, initalDelay1030AM, 24 * 60 * 60, TimeUnit.SECONDS);
scheduler.scheduleAtFixedRate(object, initalDelay630PM, 24 * 60 * 60, TimeUnit.SECONDS);
}

@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}


}