quartz - Cómo ejecutar un programa Java bajo cron e importar las jarras
spring quartz (3)
Mi archivo fuente es .../MyDir/proj/myProj.java
. Los archivos jar están en .../MyDir/proj/library
. Los archivos jar son de HTMLUnit 2.10 .
Esta es la fuente de mi archivo cron:
0 0 * * * java -classpath .../MyDir/proj/ myProj
Pero me dio el error:
Exception in thread "main" java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/WebClient
¿Cómo modifico el archivo cron para importar los archivos jar?
Algo como esto:
0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library/jar1.jar:.../MyDir/proj/library/jar2.jar myProj
o si está utilizando una JVM reciente, puede usar un comodín para hacer coincidir todos los archivos JAR.
0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library//* myProj
(La barra invertida es probablemente innecesaria porque es poco probable que ''globbing'' coincida con algo en ese contexto ...)
Mejor aún, ponga el comando (y cualquier otro que deba ejecutarse para prepararse para el lanzamiento) en un script de shell, y ejecute el script desde su entrada de crontab.
Hay una manera simple y mejor de que: puede copiar todas las instrucciones java utilizadas para ejecutar la aplicación Java en una secuencia de comandos de Linux (ejecutarJavaApp.sh), y luego verificar si se ejecuta correctamente en cualquier directorio de Linux. Si todo esta bien. Puedes vincularlo a cron.
Es muy simple implementar el trabajo CRON en java
Biblioteca requerida: quartz-2.0.0.jar
Iniciador de programador
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.text.ParseException;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class SchedulerListener{
static Scheduler scheduler = null;
public static void main(String[] args) {
// Setup the Job class and the Job group
JobDetail job = newJob(FileUploadToAzure.class).withIdentity(
"CronQuartzJob", "Group").build();
// Create a Trigger that fires every hour.
Trigger trigger;
try {
trigger = newTrigger()
.withIdentity("TriggerName", "Group")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?"))
.build();
// Setup the Job and Trigger with Scheduler & schedule jobs
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (ParseException | SchedulerException e) {
e.printStackTrace();
}
}
}
Clase de programador:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SchedulerJob implements Job {
@SuppressWarnings("unchecked")
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Print at specific time");
}
}
CronTrigger Expression Significado 0 0 12 * *? Fuego a las 12:00 (mediodía) todos los días 0 15 10? * * Disparar a las 10:15 a.m. todos los días 0 15 10 * *? Fuego a las 10:15 a.m. todos los días 0 15 10 * *? * Dispare a las 10:15 a.m. todos los días 0 15 10 * *? 2005 Incendio a las 10:15 am todos los días durante el año 2005 0 * 14 * *? Dispara cada minuto a partir de las 2 p.m. y termina a las 2:59 p.m., todos los días 0 0/5 14 * *? Disparar cada 5 minutos comenzando a las 2 p.m. y terminando a las 2:55 p.m., todos los días
Más detalles sobre CRON Trigger, luego consulte el siguiente enlace