2009-11-18 70 views
5

chúng tôi cần chạy một hàm theo định kỳ trong ứng dụng web Java. Làm thế nào để gọi chức năng của một số lớp định kỳ? Có cách nào gọi chức năng khi một số sự kiện xảy ra như tải cao trong máy chủ hay không. crontab là gì? Công việc đó có định kỳ không?Chức năng gọi định kỳ trong Java

Trả lời

10

Để gọi một cái gì đó kỳ, xem TimerTask

5

Nếu bạn cần một cái gì đó mạnh mẽ hơn bạn có thể sử dụng Quartz

Đối với crontab là công cụ lập lịch trình trên máy Unix.

+0

Mạnh mẽ hơn TimerTask? Nó chỉ linh hoạt hơn. – BalusC

+0

@BalusC: Mạnh mẽ, với Quartz, bạn có thể lên lịch các loại đối tượng khác nhau, bạn có thể sử dụng các giao dịch JTA, phân cụm và nhiều tính năng Java EE khác. – OscarRyz

+0

@Brian. Vâng vâng, nó phụ thuộc vào khái niệm mạnh mẽ của bạn sau đó. Một trong những tính năng bổ sung mà Quartz có là sự kiên trì giữa các lần khởi động lại hệ thống. Đó là một tương lai một mình, vâng, nhưng đó là một tương lai mà thêm mạnh mẽ vào thư viện anyway, ít nhất theo quan điểm của tôi. – OscarRyz

2

Nếu bạn muốn chạy một thứ định kỳ, đừng làm điều đó trong máy chủ web. Đó sẽ là một cách tiếp cận rất sai IMO. Thay vào đó, tốt hơn nên sử dụng cron, nếu bạn đang sử dụng hệ điều hành giống Unix. Các máy chủ Windows cung cấp chức năng tương tự.

+0

Ứng dụng web Java có thể chạy tốt trong Máy chủ ứng dụng JEE. Nếu hành động định kỳ bạn muốn đưa vào Business Logic được thực hiện trong JEE thì việc sử dụng JEE Timer failcities hoàn toàn hợp lý và được hỗ trợ đầy đủ. – djna

+0

Có lẽ bạn có thể giải thích tại sao nó là một cách tiếp cận xấu để đặt nó trong máy chủ web so với sử dụng một cái gì đó như cron? – chrisbunney

+0

djna: Đồng ý. Cần thêm thông tin. –

4

Đối với các phương thức gọi khi máy chủ có tải cao, bạn có ít nhất hai phương pháp có thể. Máy chủ ứng dụng của bạn có thể có các móc quản lý mà bạn có thể cho phép theo dõi hành vi của nó và thực hiện hành động progrommatic. Alterntaively bạn có một số khả năng giám sát hệ thống (ví dụ như Tivoli hoặc OpenView) và nó tạo ra "sự kiện", nó không quá khó để cung cấp các sự kiện như (ví dụ) JMS tin nhắn và có máy chủ của bạn chọn chúng lên.

Tuy nhiên, bạn có thể muốn giải thích thêm một chút về những gì bạn muốn đạt được. Ứng dụng thích ứng beahviour có thể khá phức tạp để có được quyền.

1

Làm thế nào để gọi hàm của một số lớp định kỳ?

Có một số giải pháp: a Timer, một cron Java thực hiện như cron4j, Quartz, hay thậm chí là EJB Timer API. Chọn một hoặc khác rất phụ thuộc vào bối cảnh: loại ứng dụng, công nghệ được sử dụng, số lượng công việc, v.v.

Có cách nào gọi chức năng khi một số sự kiện xảy ra như tải cao trong máy chủ và như vậy trên

Bạn có thể sử dụng JMX trong công việc của mình để truy cập và theo dõi thông tin và kích hoạt hành động trong một số điều kiện cụ thể. Nhưng đây là một chế độ kéo, chứ không phải dựa trên sự kiện.

2

chúng ta cần chạy một chức năng định kỳ trong ứng dụng web Java

(1) Vì vậy, tìm trong mô tả triển khai của bạn (web.xml) xác định một người biết lắng nghe để khởi động lúc khởi động.

Cách gọi chức năng của một số lớp học theo định kỳ?

(2) Tạo một Timer trong trình nghe.

Có cách nào mà gọi hàm khi một số sự kiện xảy ra như tải cao trong máy chủ và vân vân

(3) và chạy một số đề để kiểm tra các điều kiện hệ thống mà là accesible với Java , thậm chí chạy các hệ thống progs (thời gian hoạt động, vv) và phân tích đầu ra.

crontab có thể là một cách nhưng việc thực thi Java sẽ bắt đầu một JVM khác và đó thực sự là điều nóng trong các thùng chứa servlet: tất cả đều chạy trong cùng một JVM.

2

Nếu bạn đã sử dụng Spring, bạn có thể muốn xem xét khung công tác thực hiện của Spring - sử dụng @Scheduled và @Async để chú thích các phương thức làm nhiệm vụ và thực hiện chức năng trong Bộ xử lý ủy nhiệm công việc thực tế cho Công nhân, như mô tả trong:

http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/

Ưu điểm là bạn có thể xác định giờ sử dụng một cú pháp cron-như thế nào trong bối cảnh mùa xuân của bạn và bạn không cần bất cứ điều gì đặc biệt để thiết lập nhiệm vụ, nó cũng được cũng được tích hợp vào Các ứng dụng Java EE và nên chơi tốt với các máy chủ web (mà các Chủ đề tùy chỉnh có xu hướng không làm luôn).

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