当前遇到一个需求:

需要在web应用启动的时候就启动一个线程定时的来做某项工作。

有两种解决方法:

1.增加一个监听器Listener来实现相关功能。

2.增加一个随项目启动的servlet来实现相关功能。

这里Listener和随项目启动的servlet都可以随着项目启动而启动,只是启动的时序有所不同:

接下来分别实现下:

1.Listener实现:看代码

package com.web.cloudAgent.servlet;

import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class LoadBalanceListener implements ServletContextListener
{
private MyThread myThread;
@Override
public void contextDestroyed(ServletContextEvent arg0)
{
// TODO Auto-generated method stub
if (myThread != null && myThread.isInterrupted()) {
myThread.interrupt();
}
} @Override
public void contextInitialized(ServletContextEvent arg0)
{
// TODO Auto-generated method stub
String str = null;
if (str == null && myThread == null) {
myThread = new MyThread();
myThread.start();
}
}
}
/**
* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
*/
class MyThread extends Thread {
public void run(){
while (!this.isInterrupted()) {// 线程未中断执行循环 
try {
Thread.sleep(2000); //每隔2000ms执行一次 
System.out.println("定时执行");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
}

然后需要将Listener配置到web.xml中:

<listener>
<listener-class>com.web.cloudAgent.servlet.LoadBalanceServlet</listener-class>
</listener>

2.servlet实现:

package com.web.cloudAgent.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class LoadBalancesServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private MyThread myThread; public LoadBalancesServlet(){ } public void init(){
String str = null;
if (str == null && myThread == null) {
myThread = new MyThread();
myThread.start();
}
}
public void doGet(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse)
throws ServletException, IOException{
}
public void destory(){
if (myThread != null && myThread.isInterrupted()) {
myThread.interrupt();
}
}
} /**
* 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
*/
class MyThread extends Thread {
public void run(){
while (!this.isInterrupted()) {// 线程未中断执行循环 
try {
Thread.sleep(2000); //每隔2000ms执行一次 
System.out.println("定时执行");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
} catch (InterruptedException e) {
e.printStackTrace();
} }
}
}

然后需要配置到web.xml中:

题外话:我遇倒的一些意外情况,在servlet中需要调用一些service,service中包含一些dao,在起初测试的时候发现service会抱错NullException,后来看到网友的一句话:

因为你的servlet不是由spring管理的,所以spring就不能往servlet里注入对象,而你的action是spring管理的,所以可以注入成功。

所以最终我们通过spring 的上下文来获取相应的service。具体方法如下:

//获取当前上下文环境,spring容器
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
RegularTaskService regularTaskService = (RegularTaskService)wac.getBean("regularTaskService");

经测试,可以使用。

最新文章

  1. NOIp2014 解题报告
  2. 在c中保存状态
  3. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件
  4. bzoj 1054 移动玩具
  5. HTML5中的localStorage用法
  6. MySQL Online DDL 工具之pt-online-schema-change
  7. String、StringBuffer、StringBuilder
  8. 【POJ 1679 The Unique MST】最小生成树
  9. Prefabs实例化 ResourceMgr
  10. Android开发10.1:UI组件适配器AdapterView(创建ListView,Adapter接口)
  11. ShoneSharp语言(S#)的设计和使用介绍系列(4)— 入门概述
  12. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用
  13. BZOJ 4539: [Hnoi2016]树 [主席树 lca]
  14. MEF 基础简介 三
  15. CF1096E The Top Scorer
  16. Mac mysql sql_model引起的问题
  17. 转移动APP测试实践
  18. python 字符串占位符的使用
  19. SpringBoot入门之内嵌Tomcat配置
  20. vs2013 查找进行的过程中被停止

热门文章

  1. 数据同步canal客户端
  2. 【转】在嵌入式Linux和PC机Linux下使用popen函数时,程序运行结果有差异。
  3. SJA1000 CAN驱动程序演示实验
  4. 所做更改会影响共用模板Normal.dotm。是否保存此更改
  5. iOS开发之使用UIView-Positioning简化页面布局
  6. Python基础(list和tuple)可变集合和‘不可变’集合
  7. python 画圆
  8. Hadoop开发第2期---虚拟机中搭建Linux
  9. Java关键字 Finally执行与break, continue, return等关键字的关系
  10. Sqlserver_分组