首先,有一个XML里面,存放若干组以下内容:
1.定时任务执行的时间(或是周期或者某一时间);
2.数据库连接URL\用户名\密码
3.执行的SQL
需要按照指定的时间,在相映的数据库空中执行相映的SQL,当然这个简单.
问题是XML中的内容会被修改、删除、添加的!
如何保证在对XML修改、删除、添加后保证定时任务是按照更新后的XML中的信息执行的?
比如XML中有2组定时任务A组和B组。。。程序已经开始执行。这时我对B组的运行周期或SQL
修改的时候不影响A组的运行情况。。。并且最终B组是按照修改后的信息执行的!
请各位高手指点!急,急,急!
回答:
写了两个类.版主要是有耐心,就看一看,完善一下,应该可以用
package houlei.mission;
import java.io.Serializable;
/**
* 该类是每个任务的封装Bean类.成员变量,应该是每个任务执行条件.<br>
* 每个任务都应该有它的唯一标识符id,或者名字name也可以.其他的成员变量(像任务时间之类的),版主自己填写就可以了<br>
* @author 侯磊
*/
public class Mission implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String SQL;
public Mission(String id, String sql) {
this.id = id;
SQL = sql;
}
public boolean canExcute(){
//这里添加任务可以执行的条件.一般是根据成员变量的内容,以及当前时间来决定返回值.
return true;
}
public String getSQL() {
return SQL;
}
public String getId() {
return id;
}
}
package houlei.mission;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 任务管理器的封装类型
* @author 侯磊
*/
public class MissionManager {
private Map missions = Collections.synchronizedMap(new HashMap());
private File config;
private CheckThread checker;
public MissionManager(File config){
this.config=config;
checker= new CheckThread();
}
private void loadConfigFile(File config){
//这里添加读取配置文件的代码.创建Mission对象
//调用addMission方法更新missions的内容.
//调用removeMission将配置文件中不存在的任务删除.
}
public void addMission(String id,Mission mission){
//missions的Key存放Mission的id(字符串类型);Value存放Mission对象.
missions.put(id,mission);
}
public void removeMission(String id){
missions.remove(id);
}
public void startup(){
checker.start();
}
public void shutdown(){
checker.stop();
}
/**
* 任务的执行器线程.用于执行任务.
* @author 侯磊
*/
private class ExcutorThread implements Runnable{
private Mission mission;
private Thread instance;
private boolean running=false;
public ExcutorThread(Mission mission) {
this.mission = mission;
}
public void run() {
//这里添加任务的执行代码.如果有循环结构,要注意条件中添加running变量
mission.getSQL();//...
}
public void start(){
if(running)return;
running=true;
instance = new Thread(this);
instance.start();
}
public void stop(){
if(running){
running=false;
instance.interrupt();
// instance.join();
}
}
}
/**
* 任务管理器的巡查线程.<br>
* 用于检测配置文件是否变动,以及任务是否可以执行.
* @author 侯磊
*/
private class CheckThread implements Runnable{
private long lastReadTime=0L;
private Thread instance = new Thread(this);
private boolean running=false;
public void run() {
while(running){
//检查配置文件的时间.
File file = new File(config.getAbsolutePath());
if(file.lastModified()>lastReadTime){
loadConfigFile(file);
lastReadTime=file.lastModified();
}
//检查任务是否可以执行
synchronized (missions) {
for(Iterator itr = missions.keySet().iterator();itr.hasNext()&&running;){
String id = itr.next().toString();
Mission mission = (Mission)missions.get(id);
if(mission.canExcute()){
new ExcutorThread(mission).start();
}
}
}
try {
Thread.sleep(1000);//巡查间隔
} catch (InterruptedException e) { }
}
}
public void start(){
if(running)return;
running=true;
instance.start();
}
public void stop(){
if(running){
running=false;
instance.interrupt();
// instance.join();
}
}
}
}
摘自:http://topic.csdn.net/u/20080617/09/41b931a2-52bc-4e64-ac07-dbaea5fe6fe5.html
分享到:
相关推荐
java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现定时任务java实现...
Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)
java定时任务,每天定时执行任务,每天到这个时间点都会执行
java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度
使用quartz实现的java 定时任务,通过写cron表达式,让任务在制定时刻触发执行。
java定时任务开源案例java定时任务开源案例java定时任务开源案例java定时任务开源案例java定时任务开源案例java定时任务开源案例java定时任务开源案例java定时任务开源案例
spring+quartz整合,动态管理定时任务,可对正在进行的任务操作增删改查,可配合数据库进行操作
java写定时任务,定时任务、定时器详细示例
java定时任务,每天定时执行任务.java定时任务,每天定时执行任务.
用java写的任务定时器,设置想设的时间,选择可执行文件或者txt,word,时间一到便会自动运行。现在有源码。
只需要在web.xml文件中添加监听器listener,然后加入附件中的文件,并将lstener指向所添加的文件TimerTaskListener,定时任务的研发便可轻松搞定!
JAVA定时任务调度
"java定时任务" java定时任务是指在java程序中,使用Timer和TimerTask来实现的定时执行任务的机制。java提供了多种方式来实现定时任务,包括使用java.util.Timer和java.util.TimerTask类、使用java.lang.Thread类的...
自留demo,java定时任务quartz的基本实现,对应博客https://blog.csdn.net/jing12062011/article/details/82758536
简单的java定时任务例子,方便初学者快速了解定时任务运行机制。
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
java 定时执行任务
1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled
本文档详细的描述啦如何制定一个定时的服务,通过定时服务调用功能类,完成某项定时的任务
java web定时任务 实例 博文链接:https://af8991.iteye.com/blog/1165178