我编写了一个核心Java程序,它将根据某些标准更新数据库。它只是从表中获取了一些数据并对其进行操作并存储新数据。
我需要每天凌晨3点运行这个程序。
可以通过cron作业在Web服务器中运行核心java程序。
或者只有servlet可以在服务器端运行?我是新手。请帮忙。
答案 0 :(得分:1)
crontab 0 3 * * * myshell.sh
你的shell运行java -jar myapp.jar
或只是使用内置数据库sheduler
答案 1 :(得分:0)
缺少一些细节,但是:
如果您只使用Web服务器(tomcat?)为应用程序使用容器,您可以考虑将该应用程序部署为独立的jar,然后使用linux crontab执行它(假设您'重新使用linux)。 usage example 1,usage example 2。 我不知道你是否需要它,但是当你用crontab执行任务时,你可以将参数传递给执行的任务。
如果您决定使用Web服务器,那么您可以编写一个Java代码,用于调度定时任务(您可以使用特定的运行时间来安排它,间隔时间)。当任务执行时,它可以运行操作数据的代码。这个问题有不同的实现(java的TimerTask,quartz等等)。你可以阅读他们here。
答案 2 :(得分:0)
如Drimity所述,您可以将java程序运行命令放在脚本中并安排脚本。
echo "start"
java YourClass
echo "end"
将java程序的所有输出重定向到日志文件而不是System.out /System.err是一个很好的做法
但是,如果您使用Java EE并在Java EE服务器上,则有更好的方法。服务器将为您安排工作。您只需要一个注释。
import javax.ejb.Schedule;
import javax.ejb.Singleton;
@Singleton
public class ShedulerEjb {
/**
* This scheduler method runs at 0200 hours (system time)
*/
@SuppressWarnings("unused")
@Schedule(hour="2", minute="0", second="0")
private void doStuff(){
//Do your stuff
}
}
它下面使用操作系统的计时器服务。
PS:如果你没有制作你的bean singleton
并且在预定的时间,你的EJB bean有多个实例(比如n
),那么将执行调度的方法{ {1}}次。