实现思路:
GroovyJob 类是任务调度类,里面是groovy脚本执行引擎。不管脚本存在数据库里或者不使用grooy直接写业务都是可以的。工具类中的 createJob方法,是实现启动创建任务的方法,用户可以设置任务的名称(创建多个任务必须具有不同的名称),可以设置触发执行的时间。不通方法之间的参数交互,包括groovy脚本与系统的参数交互请查阅相关文档。 工具类: /** * * @param jobName 任务名称(唯一) * @param triggerName 触发器名称(唯一) * @param runTime 执行时间,参考quartz写法 * @param map 传递给任务类的参数 * @throws SchedulerException */public static void createJob(String jobName, String triggerName, String runTime,Map<String,String> map) throws SchedulerException { JobDetail jb = JobBuilder.newJob(GroovyJob.class) .withDescription("this is a ram job") //job的描述 .withIdentity(jobName, "ramGroup") //job 的name和group .build(); long time = System.currentTimeMillis() + 3 * 1000L; //3秒后启动任务 Date statTime = new Date(time); Set<String> keySet = map.keySet(); if(keySet!=null) for(String key:keySet){ jb.getJobDataMap().put(key, map.get(key)); } //4.创建Trigger //使用SimpleScheduleBuilder或者CronScheduleBuilder Trigger t = TriggerBuilder.newTrigger() .withDescription("") .withIdentity(triggerName, "ramTriggerGroup") //.withSchedule(SimpleScheduleBuilder.simpleSchedule()) .startAt(statTime) //默认当前时间启动,下面的用到了Quartz表达式:http://cron.qqe2.com/ .withSchedule(CronScheduleBuilder.cronSchedule(runTime)) //两秒执行一次 .build(); //5.注册任务和定时器 scheduler.scheduleJob(jb, t); //6.启动 调度器 scheduler.start();}任务类: public class GroovyJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { String id = context.getJobDetail().getKey().getName(); Binding binding = new Binding(); binding.setVariable("x", 10); binding.setVariable("language", id); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate("println \"Welcome to $language\"; y = x * 2; z = x * 3; return x "); shell.evaluate(JobUtil.runContext); System.err.println(value +", " + value.equals(10)); System.err.println(binding.getVariable("y") +", " + binding.getVariable("y").equals(20)); System.err.println(binding.getVariable("z") +", " + binding.getVariable("z").equals(30)); JobDataMap dataMap = context.getJobDetail().getJobDataMap(); String strData = dataMap.getString("xxxxxxxxxxxxxxx"); System.out.println(strData); }} 欢迎大牛来吐槽,废话不多说,直接上代码:https://github.com/cadota/grovvyJobStudy转载于:https://www.cnblogs.com/cadota/p/10598245.html
相关资源:JAVA上百实例源码以及开源项目