Java中的ScheduledExecutorService對於以固定間隔或固定延遲重複任務非常方便。我想知道是否有類似現有的ScheduledExecutorService的東西,可以讓你指定一個時間來安排任務,而不是間隔,即「我希望這個任務在每天上午10點開始」。我知道你可以用Quartz來實現這個功能,但是如果可能的話我寧願不使用這個庫(這是一個很棒的庫,但是我寧願不要因爲某些原因而依賴它)。Java中的ScheduledExecutorService是否有類似cron的實現?
回答
您可以使用Timer類。具體來說,scheduleAtFixedRate(TimerTask任務,日期firstTime,長週期)。你可以在哪裏設置一項任務,在某一天的上午10點開始,每24小時重複一次。
當您使用scheduleAtFixedRate時,您提供了延遲。所以延遲可能是上午10點和24小時的時間差。 即使使用計時器,這可能會有點偏差,所以您可以計劃一個任務,每次將適當的延遲添加到ScheduledExecutorService中。
多一點搜索在HA-JDBC已經變成了CronExecutorService。有趣的是,它對CronExpression類的Quartz依賴,但就是這樣。這並不算糟糕。
更新:我已經修復損壞的鏈接在新版本了點,但我不知道這是否是唯一的依賴更多的
ThreadPoolTaskScheduler,可以隨時使用外螺紋的管理是不是一個要求。在內部,它委託到 ScheduledExecutorService實例。 ThreadPoolTaskScheduler實際上實現了Spring的 TaskExecutor接口,因此可以儘可能快地使用單個實例進行異步執行,以及調度和潛在的循環執行。
凡爲CronTrigger()發生在cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html
有關此解決方案的更多信息,請參閱春天文檔:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;
public class CronTriggerSpringTest{
public static void main(String args[]){
String cronExpression = "0/5 * * * * *";
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.initialize();
scheduler.schedule(new Runnable() {
@Override
public void run() {
System.out.println("Hello Date:"+new Date());
}
}, new CronTrigger(cronExpression));
}
}
- 1. java中是否有任何類似LINQ的實現?
- 2. asp.net中是否有類似java的servlet
- 3. 是否有可能在Java中實現類似於Object.clone()的東西?
- 4. Scala/java是否有類似Python的StringIO?
- 5. Java中是否有RedBeanPHP ORM類似物?
- 6. Java中是否有類似android中的android.os.Handler的類?
- 7. 是否有類似autotest-fsevent for windows的實現?
- 8. cron作業之間的可變時間(或類似的實現)
- 9. slf4j中是否有類似org.apache.log4j.EnhancedPatternLayout的類?
- 10. 是否有Porter2 stemmer的java實現
- 11. 是否有Java或.NET的R實現?
- 12. 是否有R2RML的Java開源實現?
- 13. 是否有HTML5 WebSockets的Java-applet實現?
- 14. 點網(C#)中是否存在類似java RMI的概念或實現?
- 15. Java中是否有參數樹實現?
- 16. 是否可以在PHP中實現類似數組的對象?
- 17. 是否可以在Python中實現類似Ruby的內部DSL?
- 18. 類似於C#實現的TypeScript中是否存在foreach結構?
- 19. 是否可以在Python中實現類似於.NET的屬性?
- 20. 尋找實現C#接口的所有類 - 類似於Java
- 21. 是否有類似XML豆在JAVA
- 22. 是否可以用宏實現類似Scala的@BeanProperty的東西?
- 23. 是否有.NET WPF中的控件類似於Java的javax.swing.Box Strut?
- 24. 是否有類似於Java中的pyparsing的庫?
- 25. .NET中是否有類似Java中的JAR
- 26. 在Java(Android)語言中是否有類似Delphi中的TStringList?
- 27. AS3是否具有與Java的NumberFormat類似的類
- 28. Chrome中是否有globalStorage的類似物?
- 29. hibernate和nhibernate的實現有多類似?
- 30. Java中是否有類似JSON的對象?
最大的問題與此特定的方法是,它沒有考慮夏令時變化考慮在內。 – GaryF 2009-01-23 10:05:08
我選擇了這個答案,因爲它最準確地回答了我的問題,但我用我自己的答案解決了問題。 – GaryF 2009-01-23 16:19:37
`ScheduledExecutorService`遠遠優於`Timer`類,原因很多。 – 2015-07-06 16:15:24