我需要在我的web應用程序(jsp on tomcat)中執行定期操作(調用java方法)。 我該怎麼做? Java守護進程或其他解決方案?我如何製作Java Daemon
7
A
回答
8
您可以使用ScheduledExecutorService
定期執行任務。但是,如果您需要更復雜的類似cron的調度,請查看Quartz。特別是我建議使用Quartz in conjunction with Spring,因爲它提供了一個更好的API,並允許您在配置中控制工作。
ScheduledExecutorService的例子(從拍攝的Javadoc)
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}
4
亞當斯的答案是正確的金錢。如果你最終打出了自己的(而不是去石英路線),你會想要在ServletContextListener中解決問題。下面是一個使用java.util.Timer的例子,它或多或少是ScheduledExexutorPool的一個非常笨的版本。
public class TimerTaskServletContextListener implements ServletContextListener
{
private Timer timer;
public void contextDestroyed(ServletContextEvent sce)
{
if (timer != null) {
timer.cancel();
}
}
public void contextInitialized(ServletContextEvent sce)
{
Timer timer = new Timer();
TimerTask myTask = new TimerTask() {
@Override
public void run()
{
System.out.println("I'm doing awesome stuff right now.");
}
};
long delay = 0;
long period = 10 * 1000; // 10 seconds;
timer.schedule(myTask, delay, period);
}
}
然後這正好在你的web.xml
<listener>
<listener-class>com.TimerTaskServletContextListener</listener-class>
</listener>
只是更多的精神食糧!
相關問題
- 1. Python-daemon如何工作
- 2. 我該如何恢復我的git-daemon存儲庫
- 3. python-daemon with fabric
- 4. Java:如何製作域名
- 5. 如何製作Java插件?
- 6. Java如何製作窗戶?
- 7. 如何製作Java套件
- 8. JSVC Java Daemon所需的性能改進
- 9. 如何製作前臺NetServer
- 10. PYTHON WebServer Daemon
- 11. 如何在Win32 :: Daemon下運行mojolicious?
- 12. Powershell - 我該如何製作
- 13. 我如何製作和OctoberCMS
- 14. 我如何製作列表
- 15. 我如何製作動畫?
- 16. Daemon Thread in Javascript
- 17. Runnig通過Daemon作爲獨立彈簧
- 18. start-stop-daemon和Valgrind
- 19. 什麼是git-daemon?
- 20. 爲什麼Gradle Daemon會死?
- 21. 我將如何在Java中製作音頻流媒體?
- 22. JAVA - 如何爲我的軟件製作安裝程序?
- 23. 我將如何在Java中將按鈕製作爲JFrame
- 24. 我該如何在java中製作一個圖形對象?
- 25. Java - 如何製作跟隨我的播放器的相機? Slick2D
- 26. 如何使用Java Swing製作GUI
- 27. 如何製作java遊戲選項?
- 28. 如何在Java中製作3D曲面?
- 29. 如何在Java中製作3D圖形?
- 30. 如何在Java中製作星形?
類似的帖子http://stackoverflow.com/questions/3053936/how-to-execute-task-for-a-specific-period-in-java/3053971#3053971 – 2010-06-17 15:11:07