...importjava.util.ArrayList;importjava.util.List;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importorg.apache.commons.lang3.StringUtils;importorg.apache.log4j.Logger;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.util.CollectionUtils;importorg.springframework.web.context.WebApplicationContext;importorg.springframework.web.context.support.WebApplicationContextUtils;importcn.org.rapid_framework.page.Page;/*** Listener的方式在后台执行一线程
*
*@author**/
public class MyListener implementsServletContextListener {privateMyThread myThread;private Logger logger = Logger.getLogger(MyListener.class);public voidcontextDestroyed(ServletContextEvent e) {if (myThread != null &&myThread.isInterrupted()) {
myThread.interrupt();
}
}public voidcontextInitialized(ServletContextEvent e) {
String str= null;if (str == null && myThread == null) {
myThread= newMyThread(e);
myThread.start();//servlet 上下文初始化时启动 socket
}
}
}/*** 自定义一个 Class 线程类继承自线程类,重写 run() 方法,用于从后台获取并处理数据
*
*@authorChampion.Wong
**/
class MyThread extendsThread {private Logger logger = Logger.getLogger(MyThread.class);
ServletContextEvent _e;publicMyThread(ServletContextEvent e) {
_e=e;
}public voidrun() {while (!this.isInterrupted()) {//线程未中断执行循环
IGoldenPhoneManager phoneManager;
List phoneList = new ArrayList();
WebApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(_e.getServletContext());
phoneManager= (IGoldenPhoneManager) context.getBean("igoldenPhoneManager");
System.out.println("开始获取所有电话记录...");int pageSize = 100;for (int i = 0; i < 46800; i++) {
GoldenPhoneQuery query= newGoldenPhoneQuery();
query.setPageNumber(i);
query.setPageSize(pageSize);
Page result=phoneManager.findPage(query);if (result != null) {
phoneList=result.getResult();
System.out.println("获取所有电话记录数目:" +result.getResult().size());if (!CollectionUtils.isEmpty(phoneList)) {for(GoldenPhone phoneModel : phoneList) {if(StringUtils.isBlank(phoneModel.getProvinces())) {
String provinces= newPhoneService().getPhoneArea(phoneModel.getTel());
phoneModel.setProvinces(provinces);
phoneManager.update(phoneModel);try{
Thread.sleep(3000);
System.out.println("休息3m钟...");
}catch(InterruptedException e1) {
e1.printStackTrace();
}
}
}
}
}
}
}
}
}