从WAR自动运行线程

时间:2014-12-28 12:32:18

标签: java multithreading jsp war

我有一个包含一些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服务器启动时自动启动。任何帮助都感激不尽。 :)

1 个答案:

答案 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>