2012-10-02 27 views
6

tôi đã thực hiện một nhiệm vụ theo lịch trình mẫu mùa xuân, với applicationContext như sau,Làm thế nào để ngăn chặn việc theo lịch trình sử dụng lò xo nhiệm vụ

<task:scheduled-tasks scheduler="myScheduler"> 
    <task:scheduled ref="cron" method="show" cron="0/10 * * * * ?"/> 
    <task:scheduled ref="cron" method="show2" cron="0/15 * * * * ?"/> 
</task:scheduled-tasks> 

<task:scheduler id="myScheduler" pool-size="10"/> 

Làm thế nào tôi có thể ngăn chặn phương pháp kế hoạch này?

Trả lời

3

Tiêm ThreadPoolTaskScheduler vào một hạt khác và gọi shutdown(). Nếu điều đó không được chấp nhận, bạn có thể định cấu hình bean cron để chấp nhận cờ. Ví dụ:

public class Job() { 
    private final AtomicBoolean stop = new AtomicBoolean(false); 

    public void show() { 
     if (stop.get()) { 
      return; 
     } 
     ... 
    } 

    public void stop() { 
     stop.set(true); 
    } 
} 

Lưu ý rằng thao tác này sẽ không xóa công việc khỏi trình lên lịch biểu. Cách duy nhất để ngăn chặn điều đó là lấy một tham chiếu đến số ScheduledFuture và gọi cancel().

+0

Hmm, bạn có thể viết cho tôi một phương pháp dụ mà sẽ được dừng lại taks lịch phương pháp hiển thị của tôi()? – witek010

+0

@ user1579075: đã hoàn tất. –

+0

OK, vậy Làm cách nào để xóa công việc khỏi trình lên lịch? Có thể cho tôi một cái rìu? – witek010

1

Phụ thuộc vào ý bạn là "dừng".

  1. kinh doanh Điều kiện Stop: Dừng như kết quả của một tình trạng kinh doanh, bạn nên có những điều kiện đánh giá trong phương pháp của bạn và chỉ đơn giản là không thực thi mã. Bằng cách này, bạn có thể ngừng thực hiện không mong muốn trong thời gian chạy, chạy logic của bạn để xử lý các điều kiện thất bại (đăng nhập, thông báo, vv) như là một kết quả.

  2. Non Điều kiện kinh doanh: ngoài sự biểu thức Sử ký nộp tài sản hoặc là tôi thích một biến hệ thống trong JVM. Sau đó, bạn chỉ có thể thay đổi giá trị thuộc tính thành kịch bản 9999 để dừng thực hiện bất kỳ.

Ví dụ về biến hệ thống.

<task:scheduled-tasks scheduler="myScheduler"> 
<task:scheduled ref="cron" method="show" cron="#{systemProperties['chron1']}"/> 
<task:scheduled ref="cron" method="show2" cron="#{systemProperties['chron2']}"/> 

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