Java定时器使用

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>

 

 

 

基于深度学习的异常检测实战:从自编码器到GAN 本文通过一个完整的实战案例,展示了如何使用自编码器和GAN进行异常检测。我们详细介绍了数据准备、模型定义、训练和评估的步骤,并提供了可运行的代码。希望本文能为读者在实际项目中应用异常检测技术提供实用的指导和启发。 阅读详情

相关推荐

HFSS入门 - 传输线线路损耗和串扰仿真

下图中两相近传输线存在端口间的串扰,而同一根传输线存在线路损耗。 我们可用S21描述端口1到端口2的线路损耗(插损?),用S13描述近端串扰,S24描述远端串扰,串扰通常要求-20dB以下。 实验目的:传输线线路损耗和串扰仿真 具体步骤: 1.草图: 其中板厚Subh为1mm。其余参数具体值如下: 2.由草图作图: 其中介质板表面设为GND。 3.设置激励:先在第一根传输线相连的XZ平面上做一...

qq_37274411的博客 9160

Java定时器

j认识并模拟实现ava中的定时器

m0_67683346的博客 8022

矩阵LED和矩阵按键

先说矩阵LED,如图: 下面以行几、列几的表达方法说明 三极管可以当做开关使用 由图可知,如果想让一个LED亮,那么它对应的行和列的三极管都要导通。如果这个矩阵每次只亮一个LED,那么正常写程序没问题。 如果我们想让LED1和LED6亮,其他灯不亮,则需要开启行1、行2、列1、列2,随之带来的问题就是LED2和LED5也会跟着亮起来。 解决方法类似于扫描,因为单片机运行速度很快,可以在很短的时间内开关数次而肉眼看不到。所以我们可以每次只亮一列(排)灯,亮单位时间后关掉同时开启另外一列(排),如此四次一循环

qq_46615634的博客 5792

Java当中的定时器

定时器Java实现

weixin_56738054的博客 5176

PySide6多线程避坑大全:信号槽崩溃、内存泄漏,这些雷我都帮你踩过了

本文深入探讨了PySide6多线程开发中的常见问题与解决方案,包括信号槽崩溃、内存泄漏等典型陷阱。通过实战案例和优化策略,帮助开发者避免UI线程操作错误、有效管理资源生命周期,并提升跨线程通信的可靠性。特别针对PySide6多线程特性,提供了线程安全日志、死锁检测等实用调试技巧。

weixin_32288959的博客 396

光模块组成

时钟恢复电路(Clock Data Recovery,简称CDR)是光模块中的关键组成部分,CDR的作用主要是从接收到的信号中提取出数据序列,并且恢复出与数据序列相对应的时钟时序信号,从而还原接收到的具体信息。因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再定时,其中的再定时指的就是CDR时钟数据恢复。

han_better的博客 5722

Java实现定时器

Java实现定时器的几种方法

沐雨橙风ιε的博客 3万+

【ROS机器人系统】自主导航+YOLO目标检测+语音播报

完成自主导航功能,并在小车移动至指定地点的过程中,通过机器人的摄像头检测导航途中所见物体,识别出物体的种类(框选出不同物体并标注识别结果),结合科大讯飞语音合成模块对识别结果进行语音播报。..............................

南京大学软件工程硕士在读 2万+

java中的定时器

在Java中,定时器用于在预定的时间执行任务,两种方式可以实现定时功能:Timer和TimerTask类,还有ScheduledExecutorService接口。

2301_79985750的博客 2525

基于STM32L4XX、HAL库的Ra-01SC-P LoRa模块驱动程序设计

0x22) { // SX1276/SX1278版本号。// 发射功率(2-20)// 工作频率(Hz)// 编码率(5-8)

zhusl6688的博客 425

【第33话:车辆控制】自动驾驶车辆运动学模型推导及详解

自动驾驶车辆的运动学模型以自行车模型为核心,通过状态方程。

一碗白开水一 831

Java定时器的使用

个人博客:ZJBLOG 最近要用到定时任务,就是超过48小时的数据给关闭,前台就不显示了。还是头一次使用java的定时器,。。java定时器使用Timer类。有时间得看下源码了,看看具体咋弄的。 Timer主要用于Java线程里指定时间或周期运行任务。Timer是线程安全的,但不提供实时性(real-time)保证。先看看调用timer的几种方式。 1 2 3 ...

sunon_的博客 8526

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1498

java的定时器使用方法

                   java定时器的使用定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。schedule(TimerTask t

6万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java怎么使用spring定时器_浅析spring定时器的使用

原生的Java定时器使用Java.util包下的定时器也很简单,具体代码如下://设置定时器开始时间Date time = sdf.parse("2020-10-01 16:40:00");//设置定时器Timer timer = new Timer();//第三个参数表示每隔多久循环一次timer.schedule(new TimerTask() {@Overridepublic void ru...

weixin_33073525的博客 163

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java中的定时器有哪些_Java中定时器的使用方法有哪些

Java中定时器的使用方法有哪些时间:2017-09-30来源:华清远见JAVA学院在Java开发中,经常需要一些周期性的操作,每隔固定的时间进行一些操作,这个时候定时器Timer是常被使用的。那么Java中定时器的使用方法有哪些呢?今天华清Java学院小编就和大家分享一下Java中定时器使用的几种方法。Java定时器使用的具体代码如下:import java.util.Calendar...

weixin_39521009的博客 152

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java 中定时器的使用及模拟实现

本篇博客主要介绍Java中多线程使用案例之定时器的使用以及如何模拟实现。定时器也是软件开发中的一个重要组件.类似于一个 "闹钟". 达到一个设定的时间之后,就执行某个指定好的代码。目的:定时器的目的即为了在某个时间点,程序自身主动触发某个事件,而不需要外力去开启或者启动,以节省人力并统一管理。

m0_64986499的博客 340

java项目中多个定时器_在java项目中如何使用Timer定时器

在java项目中如何使用Timer定时器发布时间:2020-11-16 16:36:16来源:亿速云阅读:97作者:Leah在java项目中如何使用Timer定时器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对...

weixin_35908791的博客 1136

java 定时器 传参数_JAVA中定时器的使用

在JAVA中实现定时器功能要用的二个类是Timer,TimerTaskTimer类是用来执行任务的类,它接受一个TimerTask做参数Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率,本文有二个例子,一个是简单的一个是用了内部类1.简单实例先写一个类...

weixin_39758048的博客 1239

java之定时器的概述和使用

package cn.itcast_01; import java.sql.Time; import java.util.Timer; import java.util.TimerTask; /* * 定时器:可以让我们在制定的时间做某件事情,还可以重复做某件事情 * 定时器依赖于Timer和TimerTask这两个类 * Timer 定时器类 * 构造: * public Timer 创建定时器 * 方法: * public void schedule (Tim

kaszxc的博客 165

Java怎么使用spring定时器_Spring---定时器的使用

原生的Java定时器使用Java.util包下的定时器也很简单,具体代码如下://设置定时器开始时间Date time = sdf.parse("2020-10-01 16:40:00");//设置定时器Timer timer = new Timer();//第三个参数表示每隔多久循环一次timer.schedule(new TimerTask() {@Overridepublic void ru...

weixin_32046225的博客 194

java 定时器 quartz_Java定时器和Quartz使用

一、Java普通自定义定时器1 /**2 * 自定义一个定时器3 *@authorlw4 */5 public class MyTimer extendsThread{67 privateLong time ;89 publicMyTimer(Long time) {10 this.time =time;11 }1213 @Override14 publ...

weixin_35900668的博客 472

java定时器的使用

java定时器的使用定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。schedule(TimerTask task, Date time)设定指定任务

beanoct的专栏 516

java中怎么让定时器结束_java的定时器使用方法

定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在指定的延迟delay后执行。定时器任务类TimerTask是抽象类,继承并重写其run()方法,可实现具体任务。schedule(TimerTask task, Date time)设定指定任务task在指定时间time执...

weixin_39600319的博客 1489

java实现定时器使用和关闭 博客

实现Java定时器的使用和关闭 1. 整体流程 首先,我们来看一下实现Java定时器的使用和关闭的整体流程,可以用以下表格展示: erDiagram 理解需求 --> 创建定时器 --> 设定任务 --> 启动定时器 --> 关闭定时器2. 每一步的具体操作 2.1 理解需求 在实现Java...

weixin_36468605的博客 468
上一篇: jquery easyui validation实现多重验证
下一篇: OpenSessionInViewFilter
xia_andy
博客等级 码龄16年 0粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值