2011-12-17 30 views
5

Tôi có một ứng dụng Java EE để tải giá cổ phiếu từ internet cứ 15 phút một lần. Từ góc độ chính xác thời gian là tốt nhất cho ứng dụng để nội bộ hóa hoạt động định kỳ này tức là sử dụng Thread.sleep() kết hợp với bộ đếm hoặc thiết lập bộ hẹn giờ Hoặc sẽ tốt hơn để hiển thị tác vụ qua URL và có một công việc nền tảng nhấn vào URL định kỳ (theo tần suất yêu cầu của khóa học).Sử dụng Thread.sleep(), Timer hoặc cron job nền tảng cho một hoạt động định kỳ trong ứng dụng Java EE

Ưu và khuyết điểm của cả hai cách tiếp cận là gì?

Tôi đã bị phát hiện bởi lỗi hẹn giờ mà tôi thấy đã báo cáo về việc triển khai OpenJDK. Lỗi nói rằng những thay đổi trong thời gian hệ thống ảnh hưởng đến hoạt động của các hoạt động liên quan đến thời gian và các phương pháp như thời gian ngủ và hẹn giờ.

+1

Bạn nên cân nhắc sử dụng Quartz. – fge

+0

Tại sao mọi người lại thay đổi thời gian của hệ thống? –

+0

Related: http://stackoverflow.com/questions/7499534/applicationscope-bean-that-uses-a-timertask-sheduler-good-or-bad/7499769#7499769 và http://stackoverflow.com/questions/5357033/background-timer-task-in-jsp-servlet-web-application/5357856 # 5357856 – BalusC

Trả lời

1

Chắc chắn xem xét sử dụng công việc lên lịch được xây dựng cho công việc. Hãy thử và phân chia nhiệm vụ chính nó từ bất kỳ cân nhắc thời gian nào.

  • Như đã đề xuất, Quartz là một lựa chọn tốt.
  • Cron không phải là xấu, nhưng sẽ yêu cầu thiết lập nhiều hơn để tích hợp với nhiệm vụ của bạn.
  • Nếu trên Java EE, bạn có thể sử dụng bộ hẹn giờ EJB.
  • Bạn có thể cuộn của riêng bạn với ScheduledExecutorService (không được khuyến nghị)
1

Thread.sleep không phải là cách được khuyến nghị để thực thi mã định kỳ. Đó là không chính xác và thường là một dấu hiệu của thiết kế xấu. Tôi khuyên bạn nên sử dụng lớp Timer để dễ dàng lên lịch thực thi mã định kỳ.

2

Timer không được dùng nữa, nhưng hiện có một phương án thay thế tốt hơn: SheduledExecutorService. Một trong những điều làm cho nó tốt hơn là nó sử dụng thời gian tương đối chứ không phải là thời gian tuyệt đối để lên lịch.

Sử dụng tập lệnh cron bên ngoài hoặc bộ đếm thời gian nội bộ chỉ là vấn đề hoặc tùy chọn, IMHO. Một bộ đếm thời gian nội bộ dễ dàng hơn để thiết lập, nhưng nếu bạn đã có các crons khác tại chỗ, bạn có thể muốn sử dụng một bổ sung và có trách nhiệm này ở một nơi duy nhất.

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