`

java在每天的制定时间执行程序

阅读更多
import java.util.Calendar;
import java.util.Date;

/**
 * A DailyIterator class returns a sequence of dates on subsequent days
 * representing the same time each day.
 */
public class DailyIterator implements ScheduleIterator {
//	private int dayOfWeek = 0;
//	private int hourOfDay = 0;
//	private int minute = 0;
//	private int second = 0;
	private final Calendar calendar = Calendar.getInstance();

	public DailyIterator(int dayOfWeek,int hourOfDay, int minute, int second) {
		this(dayOfWeek,hourOfDay, minute, second, new Date());
	}

	public DailyIterator(int dayOfMonth,int hourOfDay, int minute, int second, Date date) {
//		this.dayOfWeek = dayOfWeek;
//		this.hourOfDay = hourOfDay;
//		this.minute = minute;
//		this.second = second;
		calendar.setTime(date);
//		calendar.set(Calendar.DAY_OF_WEEK, dayOfMonth);
		calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
		calendar.set(Calendar.MINUTE, minute);
		calendar.set(Calendar.SECOND, second);
		calendar.set(Calendar.MILLISECOND, 0);
		if (!calendar.getTime().before(date)) {
			calendar.add(Calendar.DATE, -1);
		}
	}

	public Date next() {
		calendar.add(Calendar.DATE, 1);
		return calendar.getTime();
	}

}
 
public class ExecuteTimerTask {
	private static final Logger logger = Logger.getRootLogger();
	private final Scheduler scheduler = new Scheduler();
	private final SimpleDateFormat dateFormat = new SimpleDateFormat(
			"dd MMM yyyy HH:mm:ss.SSS");
	private int dayOfMonth = 0;
	private int hourOfDay = 0;
	private int minute = 0;
	private int second = 0;

	private static ApplicationContext context = null;
	private int siteId = 10;
	private SiteCategoryDao siteCategoryDao = (SiteCategoryDao)(context.getBean("siteCategoryDao"));
	static{
		context = new ClassPathXmlApplicationContext(
				new String[] { "/spring-bean.xml", "/spring-dao.xml", });	
		logger.info("------> init program .....");
	}
	
	public ExecuteTimerTask(int dayOfWeek,int hourOfDay, int minute, int second) {
		this.dayOfMonth = dayOfWeek;
		this.hourOfDay = hourOfDay;
		this.minute = minute;
		this.second = second;
	}

	public void start() {
		scheduler.schedule(new SchedulerTask() {
			public void run() {
				// Start a new thread to sound an alarm...
				try {
					excuteTimerTask();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			private void excuteTimerTask()  {
				logger.info("Wake up! " + "It&quots; " + dateFormat.format(new Date()));
				//每天把当前的商品价格加入到库中
				try {
					
					TreeNode[] treeNodes;
					String url1="http://www.suning.cn/";
					String anResult="";
					String finalReString="";
					String d ="";
					   try {
						   URL b=new URL(url1);
						   URLConnection urlConnection = b.openConnection();
						   urlConnection.setReadTimeout(10000);
						   InputStream inputStream =urlConnection.getInputStream();
						   BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
						   String rString =in.readLine();
						   while (rString!=null) {
							   anResult+=rString;
							   rString=in.readLine();
						}
						   anResult=anResult.trim();
					} catch (Exception e) {
						
					}
					Parser parser = Parser.createParser(anResult, "utf-8");
					NodeFilter filter = new HasAttributeFilter("id", "SNmenuNav");;
			        NodeList children = parser.extractAllNodesThatMatch(filter);
			        NodeList dlList = children.elementAt(0).getChildren();
			        int count =0;
			        siteCategoryDao.clearSiteCategories(siteId);
			        for (int i = 0; i < dlList.size(); i++) {
						Node node = dlList.elementAt(i);
						if (node.getText().equals("dl")) {
							getallLink(node,i);//传递一级目录的
						}
					}
			        
				} catch (Exception e) {
					e.printStackTrace();
					logger.info(e.getMessage());
				}
			}
		}, new DailyIterator(dayOfMonth,hourOfDay, minute, second));
	}

	int nextid=0;//标志二级目录ID
	int firstid=0;//标志一级目录ID
	public TreeNode getallLink(Node d,int n){
		if (d.getText().indexOf("dl")>=0) {
			//System.out.println("1");
		}else if (d.getText().indexOf("dt")>=0) {
			getallLink(d.getChildren().elementAt(0),100); 
			return null;
		}else if (d.getText().indexOf("dd")>=0) {
			//System.out.println("12");
		}else if (d.getText().indexOf("ul class=\"sideleft\"")>=0) {
			//System.out.println("121");
		}else if (d.getText().indexOf("li")>=0) {
			if(d.getChildren().size()>1){
				SiteCategoryDto siteCategoryDto =new SiteCategoryDto();
				//siteCategoryDto.setCategoryName(((LinkTag) d).getLinkText());
				System.out.println("二级目录:"+d.getChildren().elementAt(2).getText());
				siteCategoryDto.setCategoryName(d.getChildren().elementAt(2).getText());
				siteCategoryDto.setCategoryUrl("#");
				siteCategoryDto.setSiteId(siteId);
				siteCategoryDto.setParentCategoryId(firstid);
				siteCategoryDto.setCategoryLevel(2);
				siteCategoryDto.setFetchSize(0);
				siteCategoryDao.addSiteCategory(siteCategoryDto);
				nextid = siteCategoryDao.getMaxId();
			}
			//System.out.println("二级目录:"+d.getChildren().elementAt(2).getText());}
			//System.out.println("1211");
		}
//		else if (d.getText().equals("b")) {
//			//System.out.println("二级目录:"+d.toHtml());
//			return null;
//		}
		else if (d.getText().equals("div")) {
			//System.out.println("12111");
		}
		else if (d.getText().indexOf("a href=")>=0) {
			SiteCategoryDto siteCategoryDto =new SiteCategoryDto();
			siteCategoryDto.setCategoryName(((LinkTag) d).getLinkText());
			siteCategoryDto.setSiteId(siteId);
			if (n==100) {
				siteCategoryDto.setParentCategoryId(0);
				siteCategoryDto.setCategoryLevel(1);
				siteCategoryDto.setCategoryUrl("http://www.suning.cn"+((LinkTag) d).getLink());
				siteCategoryDto.setFetchSize(0);
				siteCategoryDao.addSiteCategory(siteCategoryDto);
				firstid = siteCategoryDao.getMaxId();
				//System.out.println("121111");
				//System.out.println("链接是:"+((LinkTag) d).getLink()+"一级级目录:"+((LinkTag) d).getLinkText());
			} else {
				//System.out.println("121111");
				siteCategoryDto.setParentCategoryId(nextid);
				siteCategoryDto.setCategoryLevel(3);
				siteCategoryDto.setCategoryUrl("http://www.suning.cn"+((LinkTag) d).getLink());
				siteCategoryDto.setFetchSize(0);
				siteCategoryDao.addSiteCategory(siteCategoryDto);
				//System.out.println("链接是:"+((LinkTag) d).getLink()+"三级目录:"+((LinkTag) d).getLinkText());
			}
		}else{
			//System.out.println(d.getText());
			return null;
		}
		NodeList dlist = d.getChildren();
		for (int i = 0; i < dlist.size(); i++) {
	        getallLink(dlist.elementAt(i),n);
	    }
		return  null;
	}
	
	public static void main(String[] args) {
		logger.info("daily price backup task start !***********   ");
		//每天凌晨一点半触发  new ExecuteTimerTask(Calendar.HOUR_OF_DAY,1, 30,0);
		ExecuteTimerTask timerTask = new ExecuteTimerTask(Calendar.HOUR_OF_DAY,16, 58,0);
		timerTask.start();
	}
}

 

 

import java.util.Date;

public interface ScheduleIterator {
	public Date next();
}

 

package com.yihaodian.pis.timer;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Scheduler {

	class SchedulerTimerTask extends TimerTask {
		private SchedulerTask schedulerTask;
		private ScheduleIterator iterator;

		public SchedulerTimerTask(SchedulerTask schedulerTask,
				ScheduleIterator iterator) {
			this.schedulerTask = schedulerTask;
			this.iterator = iterator;
		}

		public void run() {
			schedulerTask.run();
			reschedule(schedulerTask, iterator);
		}
	}

	private final Timer timer = new Timer();

	public Scheduler() {
	}

	public void cancel() {
		timer.cancel();
	}

	public void schedule(SchedulerTask schedulerTask, ScheduleIterator iterator) {

		Date time = iterator.next();
		if (time == null) {
			schedulerTask.cancel();
		} else {
			synchronized (schedulerTask.lock) {
				if (schedulerTask.state != SchedulerTask.VIRGIN) {
					throw new IllegalStateException("Task already scheduled "
							+ "or cancelled");
				}
				schedulerTask.state = SchedulerTask.SCHEDULED;
				schedulerTask.timerTask = new SchedulerTimerTask(schedulerTask,
						iterator);
				timer.schedule(schedulerTask.timerTask, time);
			}
		}
	}

	private void reschedule(SchedulerTask schedulerTask,
			ScheduleIterator iterator) {

		Date time = iterator.next();
		if (time == null) {
			schedulerTask.cancel();
		} else {
			synchronized (schedulerTask.lock) {
				if (schedulerTask.state != SchedulerTask.CANCELLED) {
					schedulerTask.timerTask = new SchedulerTimerTask(
							schedulerTask, iterator);
					timer.schedule(schedulerTask.timerTask, time);
				}
			}
		}
	}

}

 

 

package com.yihaodian.pis.timer;

import java.util.TimerTask;

public abstract class SchedulerTask implements Runnable {

	final Object lock = new Object();

	int state = VIRGIN;
	static final int VIRGIN = 0;
	static final int SCHEDULED = 1;
	static final int CANCELLED = 2;

	TimerTask timerTask;

	protected SchedulerTask() {
	}

	public abstract void run();

	public boolean cancel() {
		synchronized (lock) {
			if (timerTask != null) {
				timerTask.cancel();
			}
			boolean result = (state == SCHEDULED);
			state = CANCELLED;
			return result;
		}
	}

	public long scheduledExecutionTime() {
		synchronized (lock) {
			return timerTask == null ? 0 : timerTask.scheduledExecutionTime();
		}
	}

}

 

如果要改成在每周的星期六早上6点执行,可做如下修改

 

//设置在每周的星期六早上六点执行,注意WEEK_OF_MONTH和一个月每周的区别,WEEK_OF_MONTH是按天数分周,一个月每周是从星期日到星期六
		ExecuteTimerTask timerTask = new ExecuteTimerTask(Calendar.WEEK_OF_MONTH,7,6,0,0);

 

public DailyIterator(int weekOfMonth, int dayOfWeek, int hour, int minute, int second, Date date) {
//		this.dayOfWeek = dayOfWeek;
//		this.hourOfDay = hourOfDay;
//		this.minute = minute;
//		this.second = second;
		calendar.setTime(date);
		calendar.set(Calendar.WEEK_OF_MONTH, weekOfMonth);
		calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
		calendar.set(Calendar.HOUR, hour);
		calendar.set(Calendar.MINUTE, minute);
		calendar.set(Calendar.SECOND, second);
		calendar.set(Calendar.MILLISECOND, 0);
		System.out.println(calendar.getTime());
		System.out.println(date);
		if (!calendar.getTime().before(date)) {
			calendar.add(Calendar.DATE, -1);
		}
	}
 

其他的修改可按照上面一次类推

分享到:
评论

相关推荐

    java视频资料下载地址

    1. **跨平台性**:Java的“一次编写,到处运行”(Write Once, Run Anywhere,简称WORA)特性使得Java程序可以在任何安装了Java虚拟机(JVM)的平台上运行,无需重新编译。 2. **安全性**:Java拥有内置的安全机制,...

    java自学如何成功

    接下来,根据自己的时间和能力制定合理的学习计划,并坚持执行。 #### 二、选择合适的学习资源 互联网上关于Java的学习资源非常丰富,包括但不限于在线课程、视频教程、书籍和博客文章等。初学者可以从官方文档...

    java初学者的忠告.txt

    根据个人情况制定一个合理的学习计划,并且按照计划执行。同时也要注意休息和放松,避免过度劳累。只有保持良好的身体状态,才能更好地投入到学习中去。 总之,成为一名优秀的Java开发者需要时间和耐心,但只要...

    基于微信小程序的学习自律养成小程序的实现+ssm框架.rar

    提供学习打卡功能,学生可以在微信小程序中记录每天的学习时间和完成情况,形成学习打卡习惯。 支持学习反馈和评价功能,学生可以对学习过程进行评价和反馈,反映学习效果和困难,从而调整学习计划。 后端SSM框架: ...

    计算机专业毕业设计-文件夹管理器.doc

    Service 是 Android 的一个组件,用于在后台执行长时间的操作。 八、SQLite 数据库 SQLite 是一个轻量级的关系数据库,常用于 Android 应用程序中的数据存储。 九、工程进度计划 工程进度计划是指在项目开发过程...

    ehour:电子小时时间表管理

    这款工具能够帮助用户有效地记录和管理他们在不同项目上所投入的时间,从而提高工作效率,优化资源分配,并提供详实的报告以支持决策制定。 ### 1. eHour的核心功能 - **时间记录**:用户可以方便地记录每天的工作...

    读写日志文件

    总结,日志读写程序在多线程环境下需要考虑线程安全、同步、缓冲等多个方面。通过合理的设计和有效的日志管理,可以极大地提升软件的可靠性和可维护性。在实际项目中,我们应根据需求选择合适的日志级别、格式和存储...

    quartz文档

    这样,开发人员可以根据实际需求,定义各种复杂的时间规则,如每天凌晨统计论坛用户的积分排名,或者每30分钟执行锁定用户解锁任务等。 Quartz还提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统...

    医院病案首页上传系统.rar

    这是系统自动化操作的一个例子,通过定时任务在特定时间执行数据上传。ICD10代表国际疾病分类第十版,是世界卫生组织制定的一种疾病和健康问题的编码系统,用于标准化疾病的记录和统计。而ICD-9-CM-3是手术与程序的...

    cronolog.exe

    Apache Tomcat是一款开源的Java Servlet容器,它用于部署和运行Java Web应用程序。在运行过程中,Tomcat会产生大量的日志信息,包括访问日志、错误日志等,这些日志对于监控服务器状态、排查问题以及性能分析至关...

    my-test.zip

    MapReduce通过读取这些日志文件,可以计算出每小时、每天或特定时间范围内的总流量、访问量最高的URL、来源IP等信息。Mapper阶段,数据会被切分为多个键值对,例如,(URL, 1)表示访问了一次该URL。Reducer则将相同...

    云备份项目(2)项目实现

    3. 备份策略:根据业务需求,设定备份频率(如每天、每周一次)、备份时间(避免业务高峰期)以及保留周期,以平衡成本和恢复点目标(RPO)。 4. 分块上传:大文件会被分成小块分别上传,这样可以提高上传速度,并...

    食物热量与运动综合计算源代码

    1. **热量计算**:程序的核心是计算人体每天的基础代谢率(BMR)和总能量消耗(TDEE)。BMR是身体在静息状态下维持基本生命活动所需的热量,通常根据身高、体重、年龄和性别来计算。TDEE则考虑了日常活动和运动消耗...

    淘宝买的后盾网的教程 花费了几十元 非常非常棒 不可多得

    1. **制定计划**:在开始学习之前,先根据自己的实际情况制定一个合理的学习计划,比如每天安排固定时间进行学习。 2. **动手实践**:理论知识很重要,但更重要的是通过动手编写代码来加深理解和记忆。 3. **参与...

    测试培训教材

    按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。  -测试需求的分析和确定。  -测试计划。  -测试设计。  -测试执行。  -...

Global site tag (gtag.js) - Google Analytics