Java定时器在项目中的使用
项目中有个自动发送邮件的功能,这里结合监听器一起使用。
/** * */ package com.bettersoft.netbank.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.List; import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.poi2.hssf.usermodel.HSSFCell; import org.apache.poi2.hssf.usermodel.HSSFRow; import org.apache.poi2.hssf.usermodel.HSSFSheet; import org.apache.poi2.hssf.usermodel.HSSFWorkbook; import com.bettersoft.admin.BtInit; import com.bettersoft.admin.UserManager; import com.bettersoft.admin.bean.CreateBankDealBillBean; import com.bettersoft.admin.dao.CreateBankDealBillDao; import com.bettersoft.admin.mail.MailSenderInfo; import com.bettersoft.admin.mail.SimpleMailSender; import com.bettersoft.netbank.bean.QueryMoneyDate; import com.bettersoft.util.DBManager; import com.bettersoft.util.HSSFExcelUtil; public class SendEmailServletListener implements ServletContextListener { Log log = LogFactory.getLog(SendEmailServletListener.class); Timer time = new Timer(true); public static String fileNameStaic; public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub log.info("自动发送邮件开始停止任务......"); time.cancel(); log.info("自动发送邮件任务已经停止!"); } public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub ServletContext context = arg0.getServletContext(); String fileName = context.getRealPath(""); System.out.println("file" + context.getRealPath("")); String isStart = context.getInitParameter("isSendEmailStart"); log.info("自动发送银行处理结果邮件=" + isStart); // 如果为true则启动此任务 if ("true".equals(isStart)) { // 每次任务运行时间间隔,单位分钟 String interval = context.getInitParameter("intervalEmail"); // 任务运行时间段起始时间 String start = context.getInitParameter("startTimeEmail"); // 任务运行时间段结束时间 String end = context.getInitParameter("endTimeEmail"); if ("".equals(interval) || interval == null) { interval = "10"; } if ("".equals(start) || start == null) { start = "06:00:00"; } if ("".equals(end) || end == null) { end = "18:00:00"; } // int intervalTime= Integer.parseInt(interval); long intervalTime = Long.parseLong(interval);// 换成long。BY:wanglh,DATE:2011-3-25 time.schedule(new SendEmailInterfaceTask(start, end, context), 60000, intervalTime * 60 * 1000); // time.schedule(new ErpInterfaceTask(start,end) , 60000, 10000); } log.info("监听器初始化完成......"); } } class SendEmailInterfaceTask extends TimerTask { Log log = LogFactory.getLog(SendEmailInterfaceTask.class); private String startTime; private String endTime; private String fileName; private ServletContext context; public SendEmailInterfaceTask(String startTime, String endTime, ServletContext context) { this.startTime = startTime; this.endTime = endTime; this.context = context; } public void run() { try { if (isOk()) { System.out.println("realPath:" + this.context.getRealPath("")); queryEmailFlag(); } else { log.info("任务未到运行时间(" + startTime + "-----" + endTime + ")"); } } catch (Exception ex) { log.info("发生异常此次任务终止!"); ex.printStackTrace(); } } // 判断是否是时候启动任务 public boolean isOk() throws Exception { boolean flag = false; Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { String currentTime; // java类获取的当前时间有时候不正确,所以从数据库取当前时间 con = DBManager.getConnection(); int dbType = DBManager.getDBType(con); String sql = ""; switch (dbType) { case 1: break; case 2: // Oracle sql = "select sysdate from dual"; break; case 3: // DB2 sql = "values current timestamp"; break; default: break; } ps = con.prepareStatement(sql); rs = ps.executeQuery(); rs.next(); currentTime = rs.getString(1); log.info("当前时间:" + currentTime); Timestamp start = Timestamp.valueOf(currentTime.substring(0, 11) + this.startTime); Timestamp end = Timestamp.valueOf(currentTime.substring(0, 11) + this.endTime); Timestamp now = Timestamp.valueOf(currentTime); if (start.compareTo(now) <= 0 && end.compareTo(now) >= 0) { flag = true; } } finally { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (con != null) { con.close(); } } return flag; } public void queryEmailFlag() { try { CreateBankDealBillDao dao = new CreateBankDealBillDao(); List v = dao.getMoneyDateExcel(); List listUser = dao.getUser(); if (listUser == null || listUser.size() < 1) { return; } String fileName = saveExcel(v); CreateBankDealBillBean bean = null; for (int i = 0; i < listUser.size(); i++) { bean = (CreateBankDealBillBean) listUser.get(i); if (!StringUtil.isEmpty(bean.getEmail())) { MailSenderInfo mailInfo = null; SimpleMailSender sms = new SimpleMailSender(); mailInfo = new MailSenderInfo(); log.info("自动发送银行处理邮件任务启动.........."); UserManager userManager = new UserManager(); mailInfo.setMailServerHost(BtInit.getMail_server_host()); mailInfo.setMailServerPort(BtInit.getMail_server_port()); mailInfo.setValidate(true); mailInfo.setUserName(BtInit.getMail_user_name()); mailInfo.setPassword(BtInit.getMail_user_pwd()); mailInfo.setFromAddress(BtInit.getMail_user_name()); // mailInfo.setToAddress(BtInit.getMail_to_address()); mailInfo.setToAddress("puzhangsz@126.com"); mailInfo.setSubject(com.bettersoft.util.Bootstrap.td_flag + "银企互联系统邮件"); mailInfo.setContent("领导,您好!" + com.bettersoft.util.Bootstrap.td_flag + "银企互联系统提醒您:根据自动发送银行处理结果邮件设置,本次银行处理结果请见附表。"); sms.sendHtmlMail(mailInfo, fileName); log.info("自动发送银行处理邮件任务结束...................."); } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 发送邮件 */ public String queryFile() { String fileName = ""; try { // System.out.println("filePath22222" // + System.getProperty("user.dir").replaceAll("\\", "/")); // SendEmailInterfaceTask.class.getResource("").getPath() // .replaceAll("%20", " ") // request.getSession().getServletContext().getRealPath(""); // String filePath = System.out.println("filePath3333333" + this.getClass().getResource("/").getPath()); String filePath = SendEmailServletListener.fileNameStaic; System.out.println("filePath" + filePath); File file = new File(filePath); if (file.isDirectory()) { File f = new File(filePath + "银行执行情况报表.xls"); if (!f.exists()) { f.createNewFile(); fileName = filePath + "银行执行情况报表.xls"; } else { // 文件删除之后再新建一个新的文件 f.delete(); f.createNewFile(); fileName = filePath + "银行执行情况报表.xls"; } } } catch (IOException e) { e.printStackTrace(); } return fileName; }
需要在web.xml配置监听器
<listener> <!-- --> <listener-class>com.bettersoft.netbank.util.SendEmailServletListener</listener-class> </listener> <context-param> <!--是否启动ERP接口回传任务: true 启动,false 不启动--> <param-name>isSendEmailStart</param-name> <param-value>true</param-value> </context-param> <context-param> <!--动ERP接口回传任务扫描间隔,分钟为单位--> <param-name>intervalEmail</param-name> <param-value>5</param-value> </context-param> <context-param> <!--每天开始启动时间,格式:hh:mi:ss(06:00:00)--> <param-name>startTimeEmail</param-name> <param-value>06:00:00</param-value> </context-param> <context-param> <!--每天运行结束时间,格式:hh:mi:ss(06:00:00)--> <param-name>endTimeEmail</param-name> <param-value>22:00:00</param-value> </context-param>
相关推荐
java定时器使用技巧
java定时器使用汇总.pdf
JAVA中定时器的使用,看例子学习定时器........一看就懂,一用就会
JAVA定时器,只要服务开启,就能指定某些代码在某个时刻执行,例如:监狱里罪犯的余刑天数,每天都要减少,就可以设置一个定时器在每天的23:59:59来执行减少余刑天数的天。
JAVA定时器JAVA定时器.pdf
Java定时器的使用 Java程序 Java写的一个定时器
java定时器
java 定时器(Timer) java 定时器(Timer) java 定时器(Timer)
实例助解java定时器设置及停止的方法
在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
java定时器,timer类操作详解 java定时器,timer类操作详解
java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次
讲解Java定时器开发
Java定时器简例
Java后台定时器代码Java后台定时器代码Java后台定时器代码Java后台定时器代码Java后台定时器代码
java定时器 spring定时器:包括spring定时器的详细配置以及说明 包含所需的jar包
Java定时器.pdf
java web 定时器例子
java定时器例子,使用 java.util.TimerTask 类来实现定时执行