我在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>
控制台打印,例如优先级,来自db的ip和Null点异常应该一次又一次地打印,因为它来自计划任务
请建议我,如何初始化类“Socket.java”而不影响应用程序的正常工作?
当我为Socket.java创建单独的侦听器并在另一个线程上执行它时,“JMonitorContextListner”上的计划任务在首次运行后停止。为什么会这样?
建议和任何代码都受到高度赞赏。