首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 使用Quartz调度框架能像Window的任务调度执行程序吗?急。。。。。 [已结贴,结贴人:nick_jian]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 11:42:56 楼主
    各位大虾好。
          请问使用Quartz调度框架能像Window的任务调度执行程序吗?我现在手头上有一个编译好的class类文件(没有源文件了),我们公司现在的做法是用bat文件执行它,公司现在要我改成用Quartz来实现,前提是class类文件是固定,没有源代码。而且这个类是要读配置文件的。如果我把这些bat里面执行的程序运用到Quartz中,能实现吗?能的话是怎么一个思路呢?或者有什么好的想法,建议呢?在此万分感谢!
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 16:54:051楼 得分:0
    1你要干的事和有没有源代码没什么关系.
    2你把那些class类 假装当成像Quartz一样的第三方包就可以了,虽然Quartz开放源码,但你一定没改它,也就是说那堆class文件和你用的Quartz本质上没啥不同的.都是一回事
    3bat里面必须调用才行,其实就是执行main方法你挪到你的代码里面就行了.
    4如果你对java基础不够了解,可以把bat贴出来,这样大家才能帮到你
    5如果你不知道那些class类对外开放的接口方法,你可以直接反编译它.
    6如果你的需求真的是否复杂,原有的class已经不再适合你去调用的话,你可以写个类继承它的类覆盖他的方法,如果的它的方法都是私有的你可以使用反射.
    7你要先分析原有程序的业务逻辑.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:31:252楼 得分:0
    你的着眼点好像被无源码固定住了,一再的强调无源码
    你把那些类或 jar 包引入到项目中,其中有哪些类和方法都能列出,你想看个究竟就反编译了

    关于 Quartz 的使用,我翻译过一个手册:

    Quartz Job Scheduling Framework[翻译]
    http://www.blogjava.net/Unmi/category/27619.html
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-20 12:26:473楼 得分:0
    sunyujia 
      你好,很高兴你能回我,谢谢你的指点,我明白了你的意思了。我是个新手,希望多多指点。按照你的思路我现在可以在quartz中执行bat文件跟普通的java执行bat文件没有区别。

    接下来我现在遇到一个设计的问题。
    下面的程序代码是一个指定时间间隔执行调用FtpClient类来读取my.properties文件
    流程如下:
    1、Scheduler启动的代码
    public class SimpleExample {
        public void run() throws Exception {
            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler sched = sf.getScheduler();
            JobDetail job = new JobDetail("job1", "group1", HelloJob.class);
            Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
            trigger.setName("hehe");
            sched.scheduleJob(job, trigger);
            sched.start();
        }
        public static void main(String[] args) {
            SimpleExample example = new SimpleExample();
            try {
    example.run();
    } catch (Exception e) {
    e.printStackTrace();
    }
        }
    }

    2、HelloJob类
    public class HelloJob implements Job {
    public HelloJob() {
    }
    public void execute(JobExecutionContext context)
    throws JobExecutionException {
    try {
    FtpClient.ReadProperties("my.properties"});
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    }
    3、FtpClient类
    public class FtpClient {
    private static final int NO_OF_PROPERTIES_ITEMS = 4;
    public static void ReadProperties(String fileName) throws Exception {
    InputStream in;
    String strDummy = "";
    StringTokenizer st;

    in = new FileInputStream(fileName);
    BufferedReader r = new BufferedReader(new InputStreamReader(in, System
    .getProperty("file.encoding")));
    java.util.Properties prop = new java.util.Properties();
    for (int i = 0; i < NO_OF_PROPERTIES_ITEMS; i++) {
    strDummy = r.readLine();
    st = new StringTokenizer(strDummy, "=");

    if (strDummy.indexOf("=") == strDummy.length() - 1) {
    prop.setProperty(st.nextToken(), "");
    } else {
    prop.setProperty(st.nextToken(), st.nextToken());
    }
    }
    in.close();
    System.out.println(prop.getProperty("FTP_HOSTNAME"));
    System.out.println(prop.getProperty("FTP_USERNAME"));
    System.out.println(prop.getProperty("FTP_PASSWORD"));
    }
    }
    4、my.properties文件里面内容
                FTP_HOSTNAME=192.168.12.44
          FTP_USERNAME=nick
          FTP_PASSWORD=nick
    上面的程序是指定时间间隔5秒读取配置文件并打印配置文件的信息

    我的问题是:
    1、如果 对不同的properties文件都分配一个trigger(可能别的properties文件我想每隔10秒或是其他时间来读)
          也就是说trigger跟peoperties文件是程序中的变动元素,而处理逻辑FtpClient类和HelloJob类是通用的。
        (  假如我有100个甚至更多properties,而我都跟上面重新增加逻辑一样的FtpClient类和HelloJob类,那样重用
              思想 就体现不了了 )

    对以上面问题1有什么办法,或者思路可行呢?
    我对quzrtz的理解是一个任务调度schedule是trigger和一个实现Job接口的类关联执行,我们要处理的逻辑都放到实现了那个Job接口的类中执行
    根据上面的思路,我不知道是否Quartz还有跟这个有关的高级的应用
    不知道我上面说的能够看的明白不?小弟的表达不够好,请谅解,呵呵。希望能指点一下思路,谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-20 12:30:594楼 得分:0
    kypfos
        你好,很感谢你给我提供资料学习,我对Quartz学习大概知道怎么回事了,对于上面这个思路不知道怎么能实现到,也希望指点指点,谢谢。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-21 20:54:235楼 得分:30
    说实话我没太理解你的需求,你不用太客气啦呵呵

    你根据你的信息猜想提供你一些信息吧,不一定是你需要的,但或许会帮助到你

    1。一个任务调度实际上是一个线程,trigger只是触发器而已,你应该更多的关注你的JobDetail 我记得一个trigger可以触发很多job
    2。有可能你的需求可以用一个job就可以了,一个job也可以读n个文件啊
    3。你可以扩大文件的使用,使用目录读取目录下面的文件
    4。你可以通过设计抽象类或接口或动态类加载来完善重用
    5。你可以定义配置文件标准,来保证n个配置文件的标准,
    6。Quartz本身是任务调度,它不能帮助你改善你的业务需求
    7。多线程编程很容易引发各种问题,建议你先搞明白多线程的一些基础知识,至少明白同步。
    8。你的下一步应该深入理解Quartz其实他的类名方法名称已经很有助于理解了,感觉你理解的有略微的偏差

    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved