javajob,java job框架

本文目录一览:

java中如何实现Job Scheduing

例如:

/**

* @author kevin zhou

*

* 在Java中实现Job Scheduling

* 创建日期 2004-7-13

*/

import java.util.TimerTask;

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class ReportGenerator extends TimerTask{

   /* (非 Javadoc)

    * @see java.util.TimerTask#run()

    */

   public void run() {

       System.out.println(“Generating report”);

}

}

class MainApplication {

 public static void main(String[] args) {

   Timer timer=new Timer();

   Calendar date = Calendar.getInstance();

   date.set(

     Calendar.DAY_OF_WEEK,

     Calendar.SUNDAY

   );

   date.set(Calendar.HOUR, 0);

   date.set(Calendar.MINUTE, 0);

   date.set(Calendar.SECOND, 0);

   date.set(Calendar.MILLISECOND, 0);

   // Schedule to run every Sunday in midnight

   timer.schedule(

     new ReportGenerator(),

     date.getTime(),

     1000 * 60 * 60 * 24 * 7

   );

 }

}

此处简单解释一下,在此例子中ReportGenerator继承java.util.TimerTask,它又继承了java.lang.Runnable,我们需要覆盖run()方法。

调用时用schedule()方法让它每周日0点0分执行,避开服务器高峰,实现Job Scheduling的目的。

补充:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

java quartz job 执行时间配置

第一步:引包

要使用Quartz,必须要引入以下这几个包:

1、log4j-1.2.16

2、quartz-2.1.7

3、slf4j-api-1.6.1.jar

4、slf4j-log4j12-1.6.1.jar

这些包都在下载的Quartz包里面包含着,因此没有必要为寻找这几个包而头疼。

第二步:创建要被定执行的任务类

这一步也很简单,只需要创建一个实现了org.quartz.Job接口的类,并实现这个接口的唯一一个方法execute(JobExecutionContext arg0) throws JobExecutionException即可。如:

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(sdf.format(new Date()));

}

}

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(sdf.format(new Date()));

}

}

这个例子很简单,就不用解说了。

第三步:创建任务调度,并执行

这一步应该算是最难的一步的,但其实是非常简单的,直接上代码

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一个Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被调用

//job 1将每隔20秒执行一次

JobDetail job = newJob(myJob.class).withIdentity(“job1”, “group1”).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(job.getKey() + ” 已被安排执行于: ” + sdf.format(ft) + “,并且以如下重复规则重复执行: ” + trigger.getCronExpression());

// job 2将每2分钟执行一次(在该分钟的第15秒)

job = newJob(myJob.class).withIdentity(“job2”, “group1”).build();

trigger = newTrigger().withIdentity(“trigger2”, “group1”).withSchedule(cronSchedule(“15 0/2 * * * ?”)).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + ” 已被安排执行于: ” + sdf.format(ft) + “,并且以如下重复规则重复执行: “+ trigger.getCronExpression());

// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job

sched.start();

try {

//主线程等待一分钟

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//关闭定时调度,定时器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一个Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被调用

//job 1将每隔20秒执行一次

JobDetail job = newJob(myJob.class).withIdentity(“job1”, “group1”).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(job.getKey() + ” 已被安排执行于: ” + sdf.format(ft) + “,并且以如下重复规则重复执行: ” + trigger.getCronExpression());

// job 2将每2分钟执行一次(在该分钟的第15秒)

job = newJob(myJob.class).withIdentity(“job2”, “group1”).build();

trigger = newTrigger().withIdentity(“trigger2”, “group1”).withSchedule(cronSchedule(“15 0/2 * * * ?”)).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + ” 已被安排执行于: ” + sdf.format(ft) + “,并且以如下重复规则重复执行: “+ trigger.getCronExpression());

// 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job

sched.start();

try {

//主线程等待一分钟

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//关闭定时调度,定时器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

OK了,Job1和Job2就会被安排为定时执行了。此时程序是可以执行的了,但是可能会输出WARN级别日志,这是因为没有加log4j的配置文件,加上配置文件,就OK了。这里需要说明的地方只有一个,其它的可以直接Copy到您的项目里面。看代码:

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

怎么实现java简单调用kettle我自己做好的job

怎么实现java简单调用kettle我自己做好的job

/**

* 本测试类慎用!!!!!!!

*

* @param args

*/

public static void main(String[] args) {

String datetime = “2014-12-19 23:20:45”;

String[] params = {“707”, datetime}; // 传递参数

String path = “F:\\job7.kjb”;

// runTransfer(params, path);

runJob(params, path);

// runJob();

// jbResource();

}

/**

* 运行转换文件方法

* @param params 多个参数变量值

* @param ktrPath 转换文件的路径,后缀ktr

*/

public static void runTransfer(String[] params, String ktrPath) {

Trans trans = null;

try {

// // 初始化

// 转换元对象

KettleEnvironment.init();// 初始化

EnvUtil.environmentInit();

TransMeta transMeta = new TransMeta(ktrPath);

// 转换

trans = new Trans(transMeta);

// 执行转换

trans.execute(params);

// 等待转换执行结束

trans.waitUntilFinished();

// 抛出异常

if (trans.getErrors() 0) {

throw new Exception(

“There are errors during transformation exception!(传输过程中发生异常)”);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* java 调用 kettle 的job

*

* @param jobname

* 如: String fName= “D:\\kettle\\informix_to_am_4.ktr”;

*/

public static void runJob(String[] params, String jobPath) {

try {

KettleEnvironment.init();

// jobname 是Job脚本的路径及名称

JobMeta jobMeta = new JobMeta(jobPath, null);

Job job = new Job(null, jobMeta);

// 向Job 脚本传递参数,脚本中获取参数值:${参数名}

// job.setVariable(paraname, paravalue);

job.setVariable(“id”, params[0]);

job.setVariable(“dt”, params[1]);

job.start();

job.waitUntilFinished();

if (job.getErrors() 0) {

throw new Exception(

“There are errors during job exception!(执行job发生异常)”);

}

} catch (Exception e) {

e.printStackTrace();

}

}

用java代码 道怎样停止一个运行的job,我发现没法停掉它.只能把整个进程退出才行.

把job放到一个线程中,用一个成员变量控制线程的运行

public class MyThead implements Runnable{

private boolean flag = false;

public void run() {

//while(){ 反复执行的程序

if(flag) //flag是开关,更改flag状态控制线程是否运行

return;

// }

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/184490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-25 17:24
下一篇 2024-11-25 17:24

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Ojlat:一款快速开发Web应用程序的框架

    Ojlat是一款用于快速开发Web应用程序的框架。它的主要特点是高效、易用、可扩展且功能齐全。通过Ojlat,开发人员可以轻松地构建出高质量的Web应用程序。本文将从多个方面对Oj…

    编程 2025-04-29
  • Zlios——一个多功能的开发框架

    你是否在开发过程中常常遇到同样的问题,需要不断去寻找解决方案?你是否想要一个多功能、易于使用的开发框架来解决这些问题?那么,Zlios就是你需要的框架。 一、简介 Zlios是一个…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29

发表回复

登录后才能评论