2010-01-11 30 views
22

Trong một ứng dụng web java (servlets/spring mvc), sử dụng tomcat, bạn có thể chạy một dịch vụ kiểu công việc cron không?Có thể chạy một công việc cron trong một ứng dụng web không?

ví dụ: 15 phút một lần, dọn dẹp cơ sở dữ liệu nhật ký.

Bạn có thể thực hiện việc này theo cách độc lập với vùng chứa hay không hoặc phải chạy bằng cách sử dụng tomcat hoặc một số vùng chứa khác?

Hãy ghi rõ nếu phương pháp này là đảm bảo để chạy tại một thời điểm cụ thể hoặc một trong đó chạy mỗi 15 phút, nhưng có thể được thiết lập lại, vv nếu tái chế ứng dụng (đó là cách nó là trong .net nếu bạn sử dụng tính giờ)

+2

Bạn không chắc chắn tại sao điều này lại bị giảm giá? +1 – ryber

Trả lời

11

Như được ghi trong Chapter 23. Scheduling and Thread Pooling, Spring có hỗ trợ lên lịch thông qua các lớp tích hợp cho Timer và Trình lên lịch thạch anh (http://www.quartz-scheduler.org/). Đối với các nhu cầu đơn giản, tôi khuyên bạn nên sử dụng JDK Timer.

Lưu ý rằng các trình lập lịch biểu Java thường được sử dụng để kích hoạt Java các công việc kinh doanh theo định hướng. Đối với các nhiệm vụ sysadmin (như ví dụ bạn đã đưa ra), bạn thực sự thích cron và các công cụ quản trị truyền thống (bash, v.v.).

+0

+1 cho cron. (15 ký tự) –

0

Nó sẽ là vùng chứa cụ thể. Bạn có thể làm điều đó trong Java với Quartz hoặc chỉ sử dụng lịch biểu đồng thời của Java (ScheduledExecutorService) hoặc dưới dạng công việc định kỳ cấp hệ điều hành.

Cứ 15 phút lại có vẻ cực đoan. Nói chung tôi cũng khuyên bạn chỉ nên cắt bớt/xóa các tệp nhật ký không còn được ghi vào (và chúng thường được cuộn qua đêm).

+0

cletus, tệp nhật ký chỉ là một ví dụ, nhưng được lấy điểm. Liệu ScheduledExecutorService có chạy ở một khoảng thời gian cố định/gauranteed hay nó phụ thuộc vào việc tái chế ứng dụng, v.v ...? – mrblah

0

Công việc được định hướng theo lô. Hoặc bằng cách kích hoạt thủ công hoặc cron-phong cách (như bạn dường như muốn).

Tôi vẫn không nhận được mối quan hệ của bạn giữa công việc webapp và cron-style? Trường hợp sử dụng webapp duy nhất mà tôi có thể nghĩ đến là bạn muốn có điểm cuối HTTP để kích hoạt một công việc (nhưng điều này phản đối tuyên bố của bạn về 'cron-style').

Thường sử dụng một khung chuyên dụng để giải quyết vấn đề 'hàng loạt việc làm'. Tôi có thể đề nghị thạch anh.

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