我有一个包含一些jsp文件的war文件。我在一个单独的java文件中有一个线程,它定期更新数据库,我的jsp文件将根据需要从数据库中获取数据。
现在,我需要线程从war存档自动启动,以便它可以定期执行任务,用户可以从视图组件获取更新结果。
public class AttendanceThread {
private long DEFAULT_SLEEP_TIME = 10000;// 10 seconds.
private long MAX_SLEEP_TIME = 30000;// 30 seconds.
private int shift;
public void MonitorAtttendance() {
final UpdateAttendance updateObject = new UpdateAttendance();
Runnable attThread = new Runnable() {
@Override
public void run() {
try {
// logic to calculate the current shift time
updateObject.CheckEmpAttendance(shift);
updateObject.resetUpdatedAttendance(shift);
Thread.sleep(MAX_SLEEP_TIME);
} else {
Thread.sleep(DEFAULT_SLEEP_TIME);
}
}// end of while (true)
} catch (Exception e) {
}
}// end of run()
}; // end of attThread definition
Thread t = new Thread(attThread);
t.setName(this.getClass().getSimpleName());
t.start();
}
public static void main(String args[]) {
// logger.log(Level.INFO, "Monitor Atttendance");
AttendanceThread ma = new AttendanceThread();
ma.MonitorAtttendance();
}
}
目前出于测试目的,我正在运行这个java文件,以便线程可以运行,我可以在我的JSP文件中获得更新结果。
我们有什么方法可以从WAR本身启动线程,或者在Web服务器启动时自动启动。任何帮助都感激不尽。 :)
答案 0 :(得分:2)
从war文件中,您可以从contextListener执行相同的操作,如:
public class ContextListenerExample implements ServletContextListener {
public void contextInitialized(ServletContextEvent e){
ServletContextcntxt = e.getServletContext();
//start your thread here
并在web.xml中定义此侦听器,以便在Web应用程序启动时启动,如下所示:
<listener>
<listener-class>ContextListenerExample</listener-class>
</listener>