我已经创建了一个调用run方法的调度程序。
@WebListener
public class BaclkgroundJobManager implements ServletContextListener {
private ScheduledExecutorService scheduler;
public void contextInitialized(ServletContextEvent sce) {
scheduler=Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new SomeMinuteJob(), 0, 5, TimeUnit.MINUTES);
}
}
此呼叫
public class SomeMinuteJob implements Runnable {
@Override
public void run() {
System.out.print("Inside run method");
ReadData obj= new ReadData();
obj.readData();
System.out.println("After reading data");
}
}
我在下面创建了ReadData
类。
public class ReadData
{
public void readData()
{
System.out.println("I am inside readdata");
}
}
因此,我在run()方法中创建了ReadData
对象,并调用了它的方法。但是控件不是ReadData类的对象。它没有在readData()方法中打印内容。甚至我创建了构造函数并放入了一些内容,尽管那不是打印内容。我该如何解决?
控件正在运行,正在打印Inside run method
答案 0 :(得分:0)
ScheduledExecutorService
的一个常见问题是,如果计划的命令引发异常,则该异常会被静默吞下。问题中的代码似乎没有引发异常,但是在更复杂的代码中,很难避免(例如意外的NullPointerExceptions)
一种快速的解决方法是将所有Runnable.run方法放在try-catch块中:
public class SomeMinuteJob implements Runnable {
@Override
public void run() {
try {
System.out.print("Inside run method");
ReadData obj = new ReadData();
obj.readData();
System.out.println("After reading data");
} catch (Exception e) {
// Log exception
e.printStackTrace();
}
}
}