- 浏览: 164368 次
- 性别:
- 来自: 武汉
文章分类
最新评论
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"s; " + 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每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务
java 记录程序执行的时间 java 记录程序执行的时间 java 记录程序执行的时间
如何将Java程序做成可执行程序,以及其使用方法
java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务java每天实现定点执行任务
使用方法,新建java项目,把下载的文件粘贴到src目录下,包名自己改。 运行main方法即可,同样也可以web形式运行。 原理一样。 若不明白,空间留言。
java定时任务,每天定时执行任务,每天到这个时间点都会执行
java中两种方式调用其他.exe可执行程序
java程序制作exe可执行程序方法 内含制作方法及教程 需要的软件为exe4j,由于我的上传权限问题,不能一次性传给大家,可以到我个人资源中下载exe4j软件!
java源代码生成exe可执行程序打包.pdf
Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中
用java语言编写的一个测试一段程序的运行时间
java通过线程控制程序执行超时(新) 基本数据类型 反射 线程 超时
将Java程序做成exe可执行文件的方法,在网上搜了一下,有很多,但是比较零散,我自己比较并总结了一下,决定使用exe4j,做了一个简单的教程(已经够用),并附带一个小例子,希望能让大家一看就会,不用在这个小问题...
java通过线程控制程序执行超时,多线程,反射
通过批处理文件进行操作: 一、操作配置 二、操作准备 三、读写操作
java写的魔塔小游戏,java游戏源码,以及可执行包 java源码 java游戏 java游戏源码 可启动程序
java程序的编码通过样例test。java(附执行程序)
如何制作Java可执行程序以及安装程序
eclipse插件,可以方便把做好的java桌面程序打包