我的源文件是.../MyDir/proj/myProj.java
。 jar文件位于.../MyDir/proj/library
下。 jar文件来自HTMLUnit 2.10。
这是我的cron文件的来源:
0 0 * * * java -classpath .../MyDir/proj/ myProj
但它给了我错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/WebClient
如何修改cron文件以导入jar文件?
答案 0 :(得分:1)
在java中实现CRON作业
非常简单必填图书馆: 石英2.0.0.jar
计划程序发起人:
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();
}
}
}
计划程序类:
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 强> 表达意义 0 0 12 * *?每天中午12点(中午)开火 0 15 10? * *每天上午10:15开火 0 15 10 * *?每天上午10:15开火 0 15 10 * *? *每天上午10:15开火 0 15 10 * *? 2005年2005年每天上午10:15开火 0 * 14 * *?每天从下午2点开始,每天下午2:59结束 0 0/5 14 * *?每隔5分钟开始一次,从下午2点开始,每天下午2:55结束
<强> More details about CRON Trigger, then please refer below link 强>
答案 1 :(得分:0)
这样的事情:
0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library/jar1.jar:.../MyDir/proj/library/jar2.jar myProj
或者如果您使用的是最新的JVM,则可以使用通配符来匹配所有JAR文件。
0 0 * * * java -classpath .../MyDir/proj/:.../MyDir/proj/library/\* myProj
(反斜杠可能是不必要的,因为'globbing'不太可能匹配该上下文中的任何内容......)
更好的是,将命令(以及需要运行的任何其他命令准备启动)放入shell脚本,然后从crontab条目运行脚本。
答案 2 :(得分:0)
有一种简单而且更好的方法:您可以将用于运行Java应用程序的所有Java语句复制到Linux脚本(runJavaApp.sh),然后验证它是否在Linux中的任何目录中正常运行。如果一切正常。你可以将它绑定到cron。
答案 3 :(得分:0)
对于Spring Boot Java用户,您可以使用 @scheduled 批注。有关更多详细信息和示例,请访问this