我希望每天触发一次方法。我已经尝试使用Timer和TimerTask进行调度,但我的问题是该程序可能每天运行几次,有一天可能没有。如何在程序首次启动时检查该方法是否已在当天运行?
谢谢!
答案 0 :(得分:1)
使用cron job安排所选方法
例如0 20 ***这是每天20:00时的时钟
答案 1 :(得分:0)
查看Java Date Class。这样,您可以保存程序在文件中运行的最后一次,然后再次运行,读取当前日期并查看当天是否更改。
答案 2 :(得分:0)
我过去使用过Quartz Scheduler:https://quartz-scheduler.org/
答案 3 :(得分:0)
如果您使用的是弹簧,则可以使用良好的抽象来触发方法:
@Configuration
@EnableAsync
@EnableScheduling
public class AppConfig {
}
我建议使用数据库同步应用的多个实例之间的每日运行:
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
Connection conn = ...
String sql= "select lastrun from runs where method = 'doSomething' for update";
PreparedStatement ps = conn.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
if(rs.getDate(1)/* is more than 23 hours ago*/){
//do your work here....
rs.updateDate(1, new Date());
rs.updateRow();
}
} else{
//todo
}
//todo: make sure rs, ps, and conn get closed...
}
来源:http://blog.udby.com/archives/15和http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-annotation-support