- 浏览: 327040 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenfang_0913:
您好,我按照您的方法在Windows端进行了实现,可是我一直捕 ...
java实现网卡数据包抓取学习 -
wps886:
google了半天全是错的,只有楼主的xml配置有用,太感谢了 ...
奇怪的400 BAD REQUEST -
laputa73:
node.addEventListener('mouseup' ...
网络拓扑图DEMO -
njyyao:
单击、双击、右击的事件处理事件?
网络拓扑图DEMO -
lilinshtandby:
不错不错,赞一个
dhtmlxTree总结
最近做了一个用java实现oracle备份的业务实现,现理清一下思路,做个备份^_^
业务难点:
1.由于要执行的定时任务是可以修改的,也就是动态的,用户可以选择是否要执行自动备份,什么时候备份,间隔多长时间备份一次
首先考虑到用quartz,但是quartz是需要配置的,而且用户如果不想要自动备份需要停止的时候,如果只单单使用quartz是很难办到的,在得到了众多网友的帮助下,终于想通了
思路如下:
使用quartz定义每隔一小时,查询一遍数据库autodb表,autodb表中仅有一条记录,
create table AUTODB
(
ID NUMBER(10) not null,
ISAUTO CHAR(1) default 0,
NEXTTIME DATE,
TYPE NUMBER(1) default 1,
CYC NUMBER(2) default 1,
HOUR NUMBER(2) default 0,
MINUTE NUMBER(2) default 0,
constraint PK_AUTODB primary key (ID)
);
insert into AUTODB(id,isauto,type,cyc) values(1,0,1,1);
/** * 是否备份,0不备份,1备份 */ private String isAuto; /** * 开始的小时时间 */ private int hour; /** * 开始的分钟时间 */ private int minute; /** * 备份的类型,1按天,2按月,3按季度,4按年 */ private int type; /** * 间隔周期 */ private int cyc; private Date nextTime;
quartz是在spring下配置的,每个1小时执行一次,内容如下:
<bean name="listenQuartz" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass"> <value>com.ngworld.insurancecard.db.ListenerQuartz</value> </property> <property name="jobDataAsMap"> <map> <entry key="timeout"><value>5</value></entry> <entry key="dmpService"><ref bean="dmpService"/></entry> </map> </property> </bean> <bean name="simpleQuartzTriggerlistenQuartz" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="listenQuartz"/> </property> <property name="cronExpression"> <value>0 0 0 * * ?</value> </property> </bean>
定时器代码:
import java.util.Calendar; import java.util.Date; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; import com.ngworld.insurancecard.service.DMPService; import com.ngworld.insurancecard.vo.AutoDB; public class ListenerQuartz extends QuartzJobBean { private DMPService dmpService; public ListenerQuartz(){} protected void executeInternal(JobExecutionContext context) throws JobExecutionException { AutoDB db = dmpService.getAutoDB(); String temp = db.getIsAuto().equals("1")?"是":"否"; System.out.println("定时检测是否需要备份 : "+temp); if(db.getIsAuto().equals("1")){ Date d = new Date(); Calendar next1 = Calendar.getInstance(); next1.setTime(d); // next1.add(Calendar.MINUTE, 1); next1.add(Calendar.HOUR_OF_DAY, 1); next1.add(Calendar.SECOND, 1); //获取下一次执行的时间 Date nexttime = db.getNextTime(); //如果当前时间在下一次执行时间之后,则需要增加下一次执行时间,直到当前时间在下次执行时间之前 if(d.after(db.getNextTime())){ //这里使用while是说明,可能一次的增加无法使下次执行时间大于当前时间,所以要循环增加 while(d.after(db.getNextTime())){ db.setNextTime(getNextTime(db)); if(d.before(db.getNextTime())){ break; } } //把下一次执行的时间保存到数据库 dmpService.updateAutoDB2(db); } Date d2 = next1.getTime(); //判断当前时间增加1小时后,是否是在下次执行时间之后,如果是,则说明,不到1个小时内就需要执行任务了, //所以需要穿件timetask定时器任务,创建一个定时器线程在下次执行的时间执行任务 if(d2.after(nexttime)){ TimeTask t = new TimeTask(db.getNextTime(),dmpService); t.start(); } } } public void setDmpService(DMPService dmpService) { this.dmpService = dmpService; } public Date getNextTime(AutoDB db){ Calendar c = Calendar.getInstance(); c.setTime(db.getNextTime()); //1按天,2按月,3按季度,4按年,5按分钟 if(db.getType()==1){ c.add(Calendar.DATE, db.getCyc()); }else if(db.getType() == 2){ c.add(Calendar.MONTH, db.getCyc()); }else if(db.getType() == 3){ c.add(Calendar.MONTH, db.getCyc()*3); }else if(db.getType()==4){ c.add(Calendar.YEAR, db.getCyc()); }else if(db.getType()==5){ c.add(Calendar.MINUTE, db.getCyc()); } return c.getTime(); } }
定时器任务代码:
public class TimeTask { private Date date; private DMPService dmpService; public TimeTask(Date _date,DMPService _dmpService) { this.date = _date; this.dmpService = _dmpService; } public void start() { System.out.println("执行定时数据库备份"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm"); String backupName = sdf.format(date); DMP dmp = new DMP(); dmp.setName(backupName); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dmp.setTime(sdf2.format(date)); dmp.setType("1"); boolean bool = dmpService.saveDmp(dmp); if(bool){ bool = dmpService.exeBackUp(dmp); } } }
发表评论
-
禁止页面放大缩小
2013-05-12 18:42 1899<html> <head> &l ... -
在web.xml中添加多个filter
2011-05-10 15:32 6657web.xml中的多个filter的运行顺序walker(wa ... -
tomcat无法启动
2011-05-08 09:11 1115Myeclipse8.5 + Tomcat7.0.5 发布应 ... -
XML to JSON
2011-04-06 16:17 1296现在JSON在前台的应用越来越广泛,不过也有很多系统是基于XM ... -
ajax tree框架(zTree)
2011-04-05 12:23 2890在以往的项目中,有时会用到树菜单的操作.我用过dhtmltre ... -
通过HttpClient发送Web Service请求
2011-01-19 10:29 1841import java.io.ByteArrayInputSt ... -
使用JES搭建小巧的Mail服务器
2010-10-26 21:56 1598最新需要使用MAIL服务器进行测试,正所谓山不在高,有仙则灵. ... -
struts2+spring2+hibernate3所需要的最少jar包
2010-04-19 16:06 1597Spring2所需要的jar包最简单,只需要一个综合的spri ... -
Struts2中获取requset,session,application
2010-01-04 13:24 1608struts2中Action是集成于com.opensymph ... -
struts2.0中struts.xml配置文件详解(转)
2010-01-04 11:10 1110<!DOCTYPE struts PUBLIC &quo ... -
struts2-Unable to load configuration. - bean - jar
2010-01-01 12:01 2853在整合Struts2 + Spring2 + Hibernat ... -
[转载]企业级SOA之路——在Web Service中使用HTTP和JMS
2009-12-28 10:28 1235本文来自CSDN博客,转载请标明出处:http://blog. ... -
XAMPP虚拟主机配置,实现单主机多个站点
2009-10-24 23:31 2784打开注释 NameVirtualHost *:80 ... -
thinkphp中使用ajax接收json数据
2009-04-01 17:25 9492参考thinkphp+jquery实现ajax,扩展了下,写了 ... -
基于服务器推的web im(未实现)
2009-03-24 16:10 1385想着手研究一下服务器推技术,看看能不能写出一个web im程序 ... -
使用dhtmltree动态生成树菜单总结
2009-03-19 13:49 5736我之前发布的dhtmltree总 ... -
能够自由拖动布局区域的网页
2009-03-11 09:54 2493<html> <head> <t ... -
jquery+json小例子
2009-02-19 16:08 10015由有不当之处,还望大家能指出。 直接进入主题,使用jquery ... -
在OpenFire的基础上安装JWChat 1.0
2009-02-12 17:57 0http://blog.csdn.net/simonhe197 ... -
JSON介绍
2008-12-11 12:18 2022JSON已经被广泛誉为浏览器中XML的替代品,它的目标仅仅是成 ...
相关推荐
CPPC++_低成本实现Wooting键盘的Rapid trigger功能不必为几个按键购买整个键盘人人都能做Wouo
CPPC++_可能是世界上最快的协同程序库
ConsulHelper,.Net微服务基础框架,已支持.NetCore,具备服务发现、健康检查、服务分级、分布式配置、版本控制
有卫星、警车、消防车、Cesium飞机、Cesium无人机等等。具体图片如下文章:https://blog.csdn.net/weixin_44857463/article/details/143721670?sharetype=blogdetail&sharerId=143721670&sharerefer=PC&sharesource=weixin_44857463&spm=1011.2480.3001.8118
yii2.0+admin后台以及rbac权限
SpringBlade3.0架构核心工具包,SpringBlade是一个由商业级项目升级优化而来的SpringCloud分布
python各种项目代码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
Apache Flink:Flink状态与容错机制.docx
CPPC++_更好的渲染龙
Commuter welfare and green commute share optimization
Amazon S3:S3智能分层存储教程.docx
LINDO和LINGO教程
CPPC++_实时语音识别和语音活动检测VAD使用nextgen Kaldi与ncnn无互联网连接支持iOS Andr
cppc++
10020
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
cppc++