描述:定时(买小时或每几小时,或每几天)将sqlserver2005的某些表导入到oracle对应的表格,并且可以通过画面能够设定导入的时间并纪录导入信息的相关纪录,所以我对这个要求现在已经做了一些处理,完成的部分
1.xml文件 ,用于配置需要导入的表格
2.reader工厂以及实现类(有多少个表格就有多少个实现类),这些类是读取sqlserver的数据的
3.writer工厂以及实现类(对应将sqlserver导入到oracle中)
只要配置好xml后就可以将xml中配置所有的表格全部导入到oracle中。
目前上面已经全部完成,剩下的就是定期执行了,现在我不知道有什么好的方法能够通过web程式来设定任务的开始时间
已经跟踪相关传入的状态,所以请大家来看看有什么好的方法。如果用线程该如何控制,还有其他好的方法?想法:
1.提供一个jsp画面用于控制任务处理程式开始时间,设定完成后写入一个配置档,下次任务开始重新读取配置档依据新的时间点执行
2.提供一个jsp画面用于显示目前处理了多少任务和当前任务状态,任务执行信息可以保存到ORACLE中以便该画面读取。
我现在是这么想,就是不知道该如何去实现它,用线程还是用其他的方法,线程可以保存在session中吗?头晕了,还请各位有什么好的方法或实现指点一二。
1.xml文件 ,用于配置需要导入的表格
2.reader工厂以及实现类(有多少个表格就有多少个实现类),这些类是读取sqlserver的数据的
3.writer工厂以及实现类(对应将sqlserver导入到oracle中)
只要配置好xml后就可以将xml中配置所有的表格全部导入到oracle中。
目前上面已经全部完成,剩下的就是定期执行了,现在我不知道有什么好的方法能够通过web程式来设定任务的开始时间
已经跟踪相关传入的状态,所以请大家来看看有什么好的方法。如果用线程该如何控制,还有其他好的方法?想法:
1.提供一个jsp画面用于控制任务处理程式开始时间,设定完成后写入一个配置档,下次任务开始重新读取配置档依据新的时间点执行
2.提供一个jsp画面用于显示目前处理了多少任务和当前任务状态,任务执行信息可以保存到ORACLE中以便该画面读取。
我现在是这么想,就是不知道该如何去实现它,用线程还是用其他的方法,线程可以保存在session中吗?头晕了,还请各位有什么好的方法或实现指点一二。
import java.util.Timer; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class TestListener implements ServletContextListener {
private Timer timer = null; public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
//加载任务、设置启动时间和任务间隔时间
timer.schedule(new TestTask(), 0, 86400000);//milliseconds
} public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
} import java.util.TimerTask; public class TestTask extends TimerTask {
public void run() {
// do something ...
}
}
web.xml:<listener>
<listener-class>test.TestListener</listener-class>
</listener>
把你的资料交换模块独立出来,做一个JAR
然后如果是linux用crontab加入到系统的定时任务里
如果是windows,查一下api吧,加win的任务里去
如果是这样,你可以设定页面定时自动刷新,这样就可以定时出发你后台的动作了。如果不一定非要在web上触发,楼上的建议可以,如果想灵活,也可以采用一些开源的调度引擎,比如最有名的:quartz,
http://www.opensymphony.com/quartz/
就是设置任务的周期执行,而不能去定时!
quartz 就可以完成定时。http://www.opensymphony.com/quartz/
我最近研究spring 呵呵 spring对这个库做了几乎接近完美的封装 先赞一下~
建议参考如下类的api
org.springframework.scheduling.timer.ScheduledTimerTask
org.springframework.scheduling.quartz.CronTriggerBean
时间元素很丰富了 包括: 秒 ,分 ,小时, 每月第几天, 月 ,每周第几天 ,年 ,
甚至可直接指定目标对象的指定方法!
可能报表(jasperReport,crystalReport...)这样的主题,关注的多些。
但是TimerTask仍旧是关注多的主题之一!成熟方案很多了,现在。
同等的主题还有mail。都是项目中常见的问题。
纯 quartz我也没用过
servlet:
public void init(ServletConfig cfg) throws ServletException {
logger.info("servlet init is running");
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
cfg.getServletContext().setAttribute(Constants.TTYPE_SIMPLE,scheduler);
if (!scheduler.isShutdown()) {
logger.info("servlet init scheduler is exists ");
scheduler.deleteJob("ReceiveOnTimed", Scheduler.DEFAULT_GROUP);
}
long ctime = System.currentTimeMillis();
JobDetail jobDetail = new JobDetail("ReceiveOnTimed", "jobDetailGroup-s2", SchedulerJobTest.class);
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger2", "triggerGroup-s2");
simpleTrigger.setStartTime(new Date(ctime));
simpleTrigger.setRepeatInterval(2*1000);
simpleTrigger.setRepeatCount(10);
scheduler.scheduleJob(jobDetail, simpleTrigger);
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
} }如果要随服务启动则写在监听中