如何使用Context Listener在启动时运行Java类而不影响其他计划任务?

时间:2017-01-08 08:26:41

标签: java eclipse tomcat initialization servletcontextlistener

我在Apache Tomcat服务器中使用Eclipse来执行我的基于java的web项目。

当应用程序启动时,我必须运行一次在类中编写的函数“socket.java”。我试图初始化这个类,我在其他servletContextListner实现的其他线程上运行其他计划任务。当我在ServletContextListner上运行'Socket.Java'时,应用程序无法正常工作。现在,其他ServletContextListner上的计划任务只运行一次。

如何解决这个问题?

我的听众课程如下: -

package com.my.classes;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class SocketContextListner implements ServletContextListener{

    private Executor Task;
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        Task= Executors.newSingleThreadExecutor();      
        Socket b = new Socket();
        Task.execute(b);
    }
}

另一个ServletContextListener有许多计划任务,当我为Socket实现Context侦听器时它没有运行

package com.my.classes;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class JMonitorContextListner implements ServletContextListener{

    private ScheduledExecutorService scheduler1;
    @Override
    public void contextDestroyed(ServletContextEvent event1) {
        // TODO Auto-generated method stub
        scheduler1.shutdownNow();
//      System.out.println("Context1 Destroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent event1) {
        // TODO Auto-generated method stub
//      System.out.println("Context1 initialized"); 
        scheduler1 = Executors.newSingleThreadScheduledExecutor();
        scheduler1.scheduleAtFixedRate(new Jmonitor(), 0, 10, TimeUnit.SECONDS);
        scheduler1.scheduleAtFixedRate(new FeedStatus(), 0, 10, TimeUnit.SECONDS);
        scheduler1.scheduleAtFixedRate(new AutoReset(), 0, 30, TimeUnit.SECONDS);
        scheduler1.scheduleAtFixedRate(new AutoLogoff(), 0, 1, TimeUnit.MINUTES);
    }

}

我的web.xml文件:

<listener>
<listener-class>com.my.classes.JMonitorContextListner</listener-class>
</listener>
<listener>
<listener-class>com.my.classes.SocketContextListner</listener-class>
</listener> 

我的控制台: enter image description here

控制台打印,例如优先级,来自db的ip和Null点异常应该一次又一次地打印,因为它来自计划任务

请建议我,如何初始化类“Socket.java”而不影响应用程序的正常工作?

当我为Socket.java创建单独的侦听器并在另一个线程上执行它时,“JMonitorContextListner”上的计划任务在首次运行后停止。为什么会这样?

建议和任何代码都受到高度赞赏。

0 个答案:

没有答案