web定时任务实例

定时任务很常用,在此写个例子做一下展示。例子很简单,利用servlet的load-on-startup配置在init方法中启动一个定时器。在需要的时间点启动任务即可。 web.xml配置 lsytestServlet com.xxx.lsy.LsyTestServlet dataSourceName data
摘要由CSDN通过智能技术生成

定时任务很常用,在此写个例子做一下展示。

例子很简单,利用servlet的load-on-startup配置在init方法中启动一个定时器。

在需要的时间点启动任务即可。

 

web.xml配置

  <!-- lsy测试   -->
  <servlet>
    <servlet-name>lsytestServlet</servlet-name>
    <servlet-class>com.xxx.lsy.LsyTestServlet</servlet-class>
    
    <init-param>
      <param-name>dataSourceName</param-name>
      <param-value>data1</param-value>
    </init-param>
    
    <load-on-startup>5</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>lsytestServlet</servlet-name>
    <url-pattern>/lsytestServlet</url-pattern>
  </servlet-mapping>


定时任务一般会和数据库打交道,这里我简单写了个数据库操作的任务,所以把数据库jdbc的部分封装了一下。

package com.sunyard.hawaii.lsy;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.naming.Context;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sunyard.hawaii.lsy.sql.LsySqlUtil;
import com.sunyard.hawaii.lsy.sql.TimerTaskOne;

/**
 * 内容1:
 * 利用servlet配置中的load-on-startup在web应用启动后,servlet调用init方法。
 * 在这个过程中可以初始化数据源,同时可以做一些其他操作,例如启动一个定时任务等。
 * 注意load-on-startup范围是1-10,数字越大,优先级越小,启动越往后。
 * 
 * 内容2:
 * 把jdbc结果集封装到一个map中,包括字段名和值
 * 数据库使用db2
 * 
 * @author lushuaiyin
 *
 */
public class LsyTestServlet extends HttpServlet {
	
	public ServletContext servletContext=null;
	public HttpServletRequest httpServletRequest=null;
	public Context ctx = null;
	
	public void init() throws ServletException {
		System.out.println("LsyTestServlet  init --------------------------------");
		
		this.servletContext= this.getServletContext();
		
		//获取web.xml配置中的初始化参数
		String dataSourceName=this.getInitParameter("dataSourceName");
		if(dataSourceName==null||dataSourceName.trim().equals("")){
			System.out.println("初始化参数dataSourceName 未获取到!");
		}else{
			System.out.println("初始化参数dataSourceName :"+dataSourceName);
			
		}
		
		//定时任务
		Timer timer = new Timer();
		TimerTask tt1=new TimerTaskOne("task111");
		
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date startPoint_date=null;
		String startPoint_Str="2013-08-16 08:37:15";
		int taskPeriod=20000;//毫秒
		try {
			startPoint_date=sdf.parse(startPoint_Str);
			System.out.println("开始执行任务时间点:"+startPoint_Str+",此后每隔"+taskPeriod+"毫秒执行一次任务。");
		} catch (ParseException e) {
			e.printStackTrace();
		}
		timer.scheduleAtFixedRate(tt1, startPoint_date, taskPeriod);
	}
	
	public void destroy(){
		System.out.println("LsyTestServlet  destroy --------------------------------");
    }

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		doPost( req, resp);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		resp.setHeader("cache-control", "no-cache");
		req.setCharacterEncoding("GBK");
		resp.setContentType("text/plain; charset=GBK");
		
		
		work( req, resp);
	}
	
	protected void work(HttpServletRequest request, HttpServletResponse resp)
			throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		HttpSession session = request.getSession();
		
		
		System.out.pr
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java分布式定时任务可以通过使用Quartz框架来实现。Quartz是一个功能强大且灵活的开源作业调度库,可以用于在Java应用程序中创建和管理定时任务。 要在分布式环境中使用Quartz,可以采用以下步骤: 1. 配置Quartz集群:在分布式环境中,多个应用程序实例可能同时执行相同的定时任务。为了避免重复调度和冲突,需要配置一个Quartz集群。这可以通过将Quartz实例连接到共享的数据库或使用Terracotta等内存网格来实现。 2. 创建定时任务使用Quartz提供的API,可以创建不同类型的定时任务,如简单触发器(SimpleTrigger)或Cron触发器(CronTrigger)。定时任务可以指定执行时间、重复次数、触发条件等。 3. 配置调度器:在每个应用程序实例中,需要配置一个调度器(Scheduler)来管理定时任务。调度器负责启动、暂停、恢复和停止定时任务的执行。 4. 启动调度器:在应用程序启动时,需要启动调度器以开始执行定时任务。可以通过调用调度器的start方法来实现。 5. 监控和管理:Quartz提供了一些管理和监控工具,可以用于查看和管理正在运行的定时任务。可以使用Quartz的API或使用Quartz提供的web界面来实现。 需要注意的是,在分布式环境中,需要确保定时任务在不同的应用程序实例之间进行正确的负载均衡。可以使用调度器的集群功能或其他负载均衡机制来实现。 希望以上信息对你有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值