利用JAVA反射调用定时任务Quartz

Usher丶AckMan 2016-05-18 09:36:06
源代码

package com.ninemax.application.quartz.loader;

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

import org.quartz.JobDetail;

import com.ninemax.application.quartz.model.MyJob;
/**
* 利用JAVA反射调用定时任务
*
* @author Darker
*
*/
@SuppressWarnings("all")
public class ClassLoaderTest {

public static void main(String[] args) {
// 读取指定JAR包
File jarFile= new File("E:/Worksapces2015/Vip/WebRoot/WEB-INF/lib/quartz-1.8.3.jar");

try {
// 加载指定JAR包
URLClassLoader loader=new URLClassLoader(new URL[]{jarFile.toURL()});
// 加载指定JAR包中的类
Class SchedulerFactoryClazz=loader.loadClass("org.quartz.impl.StdSchedulerFactory");
Class CronTriggerClazz=loader.loadClass("org.quartz.CronTrigger");
Class JobDetailClazz=loader.loadClass("org.quartz.JobDetail");
Class SchedulerClazz=loader.loadClass("org.quartz.Scheduler");
Class TriggerClazz=loader.loadClass("org.quartz.Trigger");
// 调度工厂SchedulerFactory初始化
Object schedulerFactory = SchedulerFactoryClazz.newInstance();
// 调度器Scheduler初始化 11
//Object scheduler=SchedulerClazz.newInstance();
// 通过调度工厂获取调度器scheduler
Object scheduler=schedulerFactory.getClass().getDeclaredMethod("getScheduler", null);
// 创建jobDetail实例,绑定Job实现类
// 指明job的名称,所在组的名称以及绑定job类
//Field field1= JobDetailClazz.getDeclaredField("name");//获取字段
//Field field2= JobDetailClazz.getDeclaredField("group");//获取字段
//Field field3= JobDetailClazz.getDeclaredField("jobClass");//获取字段
//field1.setAccessible(true);
//field2.setAccessible(true);
//field3.setAccessible(true);
// 初始化JobDetail实例
Object jobDetail=JobDetailClazz.newInstance();
// jobDetail赋值
//field1.set(jobDetail, "job1");
//field2.set(jobDetail, "group1");
//field3.set(jobDetail, MyJob.class);
Constructor jobDetailMethod=jobDetail.getClass().getConstructor(String.class,String.class,Class.class);
// 构造方法jobDetail填写参数
jobDetailMethod.newInstance("job1","group1",MyJob.class);
//jobDetailMethod.invoke();
// 定义调度触发规则,每天上午10:15执行
//Field field11 = CronTriggerClazz.getDeclaredField("name");//获取字段
//Field field22 = CronTriggerClazz.getDeclaredField("group");//获取字段
//field11.setAccessible(true);
//field22.setAccessible(true);
// 初始化实例
Object cronTrigger=CronTriggerClazz.newInstance();
// cronTrigger构造方法
Constructor cronTriggerMethod=cronTrigger.getClass().getConstructor(String.class,String.class);
// 构造方法cronTrigger填写参数
cronTriggerMethod.newInstance("cronTrigger","triggerGroup");
// cronTrigger赋值
//field11.set(cronTrigger,"cronTrigger");
//field22.set(cronTrigger, "triggerGroup");
// 获取CronExpression方法
Method cronExpression = cronTrigger.getClass().getDeclaredMethod("setCronExpression", String.class);
// 设置cronExpression参数
cronExpression.invoke(cronTrigger, "0 30 18 * * ? *");
// 获取scheduleJob方法
Method scheduleJob=scheduler.getClass().getDeclaredMethod("scheduleJob", JobDetailClazz,TriggerClazz);
// 设置参数
scheduleJob.invoke(scheduler, jobDetail,cronTrigger);
// 获取start方法
scheduler.getClass().getDeclaredMethod("start", null);
} catch (Exception e) {
e.printStackTrace();
}

}

}

报错内容
java.lang.NoSuchMethodException: java.lang.reflect.Method.scheduleJob(org.quartz.JobDetail, org.quartz.Trigger)
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at com.ninemax.application.quartz.loader.ClassLoaderTest.main(ClassLoaderTest.java:78)
...全文
223 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Usher丶AckMan 2016-05-18
  • 打赏
  • 举报
回复
shceduler明明有这个方法,可我不知道为什么找不到一直!
scmod 2016-05-18
  • 打赏
  • 举报
回复
方法是本身自带的还是继承来的...declared貌似公私都能拿就是拿不到父类的,或者全列出来看看参数,总归这样咯

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧