`
helloJ
  • 浏览: 166539 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

提问:JAVA操作定时任务

    博客分类:
  • java
阅读更多

首先,有一个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

分享到:
评论
2 楼 helloJ 2008-07-24  
只是转载下,有用到时做个参考,遇到问题解决不了,再网上找
1 楼 projector 2008-07-14  
你好,您要是能够再详细的讲解一下就好了。。。。

相关推荐

    自制定时关机小程序开放源码

    例如,在Java中,可以使用ScheduledExecutorService接口,而在Python中,则可以利用time模块或者schedule库来设定定时任务。源码中可能使用了类似的方法,通过设置一个未来的触发时间,当达到这个时间点时,执行相应...

    smslib-v3.5.2

    - **多平台支持**:SMSLib支持Java和.NET环境,这意味着它可以在各种操作系统上运行,如Windows、Linux、Mac OS等。 - **GSM模块兼容性**:SMSLib能与大多数市面上的GSM调制解调器或短信猫(SIM900系列、Wavecom、...

    JAVA 桌面气泡 升级版

    这使得JAVA桌面气泡能在不同的操作系统上运行,包括Windows、Linux和Mac OS。 2. **桌面气泡功能**:气泡提示是程序与用户进行快速交流的一种方式,常用于显示通知、提示信息或简单的交互操作。JAVA桌面气泡升级版...

    centOS6中使用crontab定时运行执行jar程序的脚本

    总结一下,本文详细介绍了如何在CentOS6中使用crontab进行定时任务的配置,包括编写Java程序、Shell脚本以及设置crontab规则。这种方法适用于任何需要周期性执行的Java应用程序,不仅可以提高工作效率,还可以确保...

    2021-2022计算机二级等级考试试题及答案No.19256.docx

    **知识点解析**: 在Visual Basic中,Timer对象是一个不可见的对象,它的作用是在指定的时间间隔触发事件,通常用于后台任务的定时执行。用户界面上看不到Timer对象的存在。 #### 题目13: 算法的空间复杂度 **题目描述*...

    JavaSE常见面试题-线程篇.pdf

    9. **多线程的应用场景**:虽然在Java Web开发中,服务器容器(如Tomcat)通常已经实现了多线程处理请求,但在其他领域,如定时任务、数据库连接管理等,多线程仍是不可或缺的。 10. **ExecutorService与线程池**:...

    考研互助平台-JAVA-基于springboot考研互助平台设计与实现(毕业论文+PPT)

    问答功能:用户可以提问并寻求解答,社区成员可以为问题提供解决方案或建议。 4. 学习小组 组建学习小组:用户可以根据自身专业或目标院校组建学习小组,进行线上线下的交流与学习。 定期在线学习:提供定时在线学习...

    02 绝对不仅仅是为了面试—我们为什么需要学习多线程.pdf

    - **定时任务**:线程调度可以用于实现定时任务,如定时发送邮件、执行系统维护等。 - **资源竞争与同步**:在多线程环境下,正确处理资源的竞争和同步是保证程序正确性的关键,如互斥锁、信号量等。 4. **学习多...

    JBPM4.3开发指南(chm版)

    2. **定时器**:可以设定流程中的定时任务,如等待一段时间后自动执行下一步。 3. **子流程**:在一个大流程中嵌套小流程,提高流程的可重用性。 4. **工作流监听器**:实现自定义事件监听,扩展流程行为。 5. **...

    JBPM开发指南中文版

    3. **kie-executor**: 定时任务执行器,用于调度和执行流程实例或任务。 4. **kie-api**: 用于与JBPM交互的API,包括流程定义、实例管理和任务操作。 ### 三、JBPM开发流程 1. **流程建模**: 使用kie-workbench中...

    apache-dolphinscheduler-1.3.2-dolphinscheduler-bin.tar.gz

    - **任务调度**:支持定时、依赖、事件触发等多种调度策略,满足不同场景的需求。 - **资源管理**:允许用户管理和分配任务执行所需的计算资源,如CPU、内存等。 - **监控与告警**:实时监控任务状态,提供异常...

    10+年程序员总结的20+条经验教训,看完必须转发、收藏、学习

    6. **侯世达定律**:预计任务所需时间总是比实际所需时间长,因此要做好时间管理,预留应对意外问题的时间。 7. **理解现有代码**:在修改或扩展现有代码之前,务必深入理解其工作原理,避免无意中破坏已有功能。 ...

    quartz和spring整合完整测试

    两者的结合能够帮助开发者在Spring应用中方便地管理和执行定时任务。 在Quartz与Spring的整合中,首先需要理解Quartz的核心概念。Quartz主要有Job(任务)、Trigger(触发器)和Scheduler(调度器)三个关键元素。...

    Multi Cron Ftp-开源

    - **计划任务**:用户可以设置定时任务,使FTP脚本按预定的时间间隔自动执行,这极大地方便了定期备份、同步或其他周期性任务。 - **脚本执行**:用户可以编写自己的FTP脚本,这些脚本可以包含一系列FTP命令,如上...

    易买网JAVAWEB源码,可运行,内含sql数据

    这部分可能结合数据库触发器或定时任务来更新和检查库存。 8. **用户管理**:包括用户注册、信息修改、密码找回等功能,涉及数据库操作和邮件服务,可能使用Spring Boot集成的各种服务组件。 9. **咨询列表**:...

    大学生心理健康测评管理系统微信小程序.zip

    SpringBoot简化了Spring应用的初始搭建以及开发过程,它集成了大量常用的第三方库配置,如数据源、JPA、定时任务等,使得开发者可以“零配置”开始项目。通过自动配置和起步依赖,SpringBoot能够快速创建独立运行的...

    osworkflow

    4. **事件驱动**:通过监听器(Listeners)和触发器(Triggers),osWorkflow 可以响应外部事件,如定时任务或用户交互,从而驱动流程的执行。 5. **持久化存储**:osWorkflow 内置了对数据库的支持,可以将流程...

    This resource should be closed

    5. **定期清理**:对于服务器上的临时资源,可以设置定时任务进行定期清理,避免资源堆积导致的问题。 6. **更新维护**:对于过期的在线资源,如网站、服务等,应及时更新或下线,以免影响用户体验或造成安全隐患。...

    546在线答疑系统文件.zip

    7. **任务调度**:如使用Quartz或Spring Task,定时清理过期数据、发送提醒等。 8. **前端技术**:如React、Vue.js或Angular,构建交互式用户界面。 **开发流程与实践:** 1. **需求分析**:明确系统功能和用户需求...

    将个人微信化身GPT机器人, 项目基于openwechat 开发

    - 可能还需要设置日程管理或任务调度功能,让机器人能够执行定时任务,比如定时发送消息。 通过以上分析,我们可以看出这个项目结合了微信个人号自动化、自然语言处理、事件驱动编程等多个IT领域的知识点,是一个...

Global site tag (gtag.js) - Google Analytics