1你要干的事和有没有源代码没什么关系.
2你把那些class类 假装当成像Quartz一样的第三方包就可以了,虽然Quartz开放源码,但你一定没改它,也就是说那堆class文件和你用的Quartz本质上没啥不同的.都是一回事
3bat里面必须调用才行,其实就是执行main方法你挪到你的代码里面就行了.
4如果你对java基础不够了解,可以把bat贴出来,这样大家才能帮到你
5如果你不知道那些class类对外开放的接口方法,你可以直接反编译它.
6如果你的需求真的是否复杂,原有的class已经不再适合你去调用的话,你可以写个类继承它的类覆盖他的方法,如果的它的方法都是私有的你可以使用反射.
7你要先分析原有程序的业务逻辑.
2你把那些class类 假装当成像Quartz一样的第三方包就可以了,虽然Quartz开放源码,但你一定没改它,也就是说那堆class文件和你用的Quartz本质上没啥不同的.都是一回事
3bat里面必须调用才行,其实就是执行main方法你挪到你的代码里面就行了.
4如果你对java基础不够了解,可以把bat贴出来,这样大家才能帮到你
5如果你不知道那些class类对外开放的接口方法,你可以直接反编译它.
6如果你的需求真的是否复杂,原有的class已经不再适合你去调用的话,你可以写个类继承它的类覆盖他的方法,如果的它的方法都是私有的你可以使用反射.
7你要先分析原有程序的业务逻辑.
你把那些类或 jar 包引入到项目中,其中有哪些类和方法都能列出,你想看个究竟就反编译了关于 Quartz 的使用,我翻译过一个手册:Quartz Job Scheduling Framework[翻译]
http://www.blogjava.net/Unmi/category/27619.html
你好,很高兴你能回我,谢谢你的指点,我明白了你的意思了。我是个新手,希望多多指点。按照你的思路我现在可以在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还有跟这个有关的高级的应用
不知道我上面说的能够看的明白不?小弟的表达不够好,请谅解,呵呵。希望能指点一下思路,谢谢
你好,很感谢你给我提供资料学习,我对Quartz学习大概知道怎么回事了,对于上面这个思路不知道怎么能实现到,也希望指点指点,谢谢。
2。有可能你的需求可以用一个job就可以了,一个job也可以读n个文件啊
3。你可以扩大文件的使用,使用目录读取目录下面的文件
4。你可以通过设计抽象类或接口或动态类加载来完善重用
5。你可以定义配置文件标准,来保证n个配置文件的标准,
6。Quartz本身是任务调度,它不能帮助你改善你的业务需求
7。多线程编程很容易引发各种问题,建议你先搞明白多线程的一些基础知识,至少明白同步。
8。你的下一步应该深入理解Quartz其实他的类名方法名称已经很有助于理解了,感觉你理解的有略微的偏差