2009-04-30 35 views
7

Tôi đang tìm một cách hiệu quả để thực hiện một phương thức hàng ngày vào lúc 3 giờ chiều bất kể khi nào ứng dụng được chạy ban đầu hoặc thời gian nó đã chạy.Java - Lập kế hoạch cho một công việc hàng ngày

này phải được thực hiện hoàn toàn từ các ứng dụng không có sự can thiệp của hệ điều hành (ví dụ. Windows Task Scheduler)

Tôi đã được thử nghiệm với java.util.Timer trong thay đổi cấu hình nhưng tôi đã không thành công.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn.

+1

Bạn đang gặp khó khăn gì? Nó nên được thẳng về phía trước để có một bộ đếm thời gian thức dậy theo định kỳ và kiểm tra thời gian trong ngày và nhìn vào bảng ứng dụng của bạn 'cron' để xem có nên làm gì không. Không? – jottos

Trả lời

16

Bạn nên xem Quartz là hệ thống lập kế hoạch công việc dựa trên Java.

+0

Chắc chắn sử dụng Quartz. Đây là lịch trình yêu thích của tôi. Chạy như một sự quyến rũ – Maksim

+0

Tôi đã luôn luôn tự hỏi. Bạn cần một ứng dụng đang chạy để chạy Quartz ở vị trí đầu tiên phải không? Có thể chạy nó khi không có ứng dụng nào được khởi động không? Làm thế nào một ứng dụng java có thể chạy trong nền? (có thể chạy trong một TrayIcon hoặc một cái gì đó như thế?) – OscarRyz

+0

Có, phải có một ứng dụng Java chạy bao gồm Quartz. Có một cái nhìn tại http: // stackoverflow.com/questions/326509/java-background-daemon-dịch vụ-nền tảng-tốt nhất-pratices cho chạy các ứng dụng Java trong nền. – Mark

1

Bạn có thể bắt đầu một chuỗi tính toán sự khác biệt cho 3 giờ chiều tiếp theo và ngủ cho thời gian đó. Khi nó thức dậy, nó thực hiện phương thức và tính toán lại và ngủ. Đây có phải là ý của bạn không?

2

Có thể bạn sẽ muốn sử dụng một cái gì đó như quartz engine nó có thể làm những việc như thực hiện các tác vụ bị mất (như trong vụ tai nạn ahem) và không cần cố gắng quản lý chuỗi. Ví dụ nếu bạn sử dụng chủ đề và đặt nó vào giấc ngủ và đánh thức nó lên 86400 giây (một ngày) sau đó bạn sẽ thức dậy và giờ muộn (ngày = 82800 giây) hoặc sớm (ngày = 90000 giây) trên thay đổi DST qua ngày, vì vậy hãy cẩn thận với bất kỳ giải pháp bạn chọn

2

Cách JDK tích hợp là thực hiện những gì người khác đề xuất và tính toán lần đầu tiên:

  • currentTime - mongTime

Sau đó, bạn có thể sử dụng một cái gì đó như a schedule executor để gửi các tác vụ và chạy chúng với độ trễ cụ thể. Điều này đơn giản hơn nhiều so với các tùy chọn bạn có với các khung như Quartz, nhưng không yêu cầu phụ thuộc bên ngoài.

Ngoài ra, bạn nên luôn liệt kê bạn đang sử dụng JDK nào, vì vậy mọi người có thể cung cấp các giải pháp cho phiên bản JDK của bạn.

1

Jcrontab

Jcrontab là một lịch trình viết bằng Java. Mục tiêu của dự án là cung cấp một lịch trình đầy đủ chức năng cho các dự án Java.

Các vấn đề liên quan