Tôi có một yêu cầu để chạy công việc hàng loạt tại một khoảng thời gian cố định và có khả năng thay đổi thời gian của công việc hàng loạt này khi chạy. Đối với điều này tôi đã xem qua chú thích @ Scheduled được cung cấp trong khung Spring. Nhưng tôi không chắc chắn làm thế nào tôi sẽ thay đổi giá trị của fixedDelay khi chạy. Tôi đã làm một số googling xung quanh nhưng không tìm thấy bất cứ điều gì hữu ích.Cách thay đổi Spring's @Scheduled fixedDelay tại thời gian chạy
Trả lời
Bạn có thể sử dụng Trigger
để tự động đặt thời gian thực hiện tiếp theo. Xem câu trả lời của tôi ở đây:
Scheduling a job with Spring programmatically (with fixedRate set dynamically)
AFAIK API Spring sẽ không cho phép bạn truy cập vào nội bộ bạn cần thay đổi trình kích hoạt. Nhưng bạn thay vì có thể cấu hình bằng tay đậu:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="50000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
Sau đó, như tài liệu trong SchedulerFactoryBean:
Đối với đăng ký năng động của công việc trong thời gian chạy, sử dụng một tham chiếu đậu để SchedulerFactoryBean này để có được quyền truy cập trực tiếp đến Quartz Scheduler (
org.quartz.Scheduler
). Điều này cho phép bạn tạo các công việc và kích hoạt mới và cũng có thể kiểm soát và giám sát toàn bộ Công cụ lập lịch biểu .
Trong khởi động mùa xuân, bạn có thể sử dụng một tài sản ứng dụng trực tiếp!
Ví dụ:
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds}000")
private void process() {
// your impl here
}
Lưu ý rằng bạn cũng có thể có một giá trị mặc định trong trường hợp tài sản không được định nghĩa, ví dụ như để có một mặc định của "60" (giây):
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds:60}000")
những điều khác tôi phát hiện ra:
- phương pháp phải được bãi bỏ
- phương pháp này phải không có thông số
- phương pháp này có thể
private
tôi thấy việc có thể sử dụng private
tầm nhìn tiện dụng và sử dụng nó theo cách này:
@Service
public class MyService {
public void process() {
// do something
}
@Scheduled(fixedDelayString = "${my.poll.fixed.delay.seconds}000")
private void autoProcess() {
process();
}
}
Being private
, phương thức được lên lịch có thể là cục bộ cho dịch vụ của bạn và không trở thành một phần của API dịch vụ của bạn.
Ngoài ra, phương pháp này cho phép phương pháp process()
trả lại giá trị, phương pháp @Scheduled
có thể không. Ví dụ, phương pháp process()
của bạn có thể trông giống như:
public ProcessResult process() {
// do something and collect information about what was done
return processResult;
}
để cung cấp một số thông tin về những gì đã xảy ra trong khi xử lý.
Cảm ơn, 'fixedDelayString' là những gì tôi đang tìm kiếm – prettyvoid
Câu trả lời hay. Làm việc như mô tả. – flash
@Bohemain Cảm ơn bạn đã giải pháp, nhưng bản cập nhật fixedDelay được cập nhật như thế nào trong thời gian chạy? –
- 1. Thay đổi menu tại thời gian chạy
- 2. Thay đổi App.config tại Thời gian chạy
- 3. WPF: Cách thay đổi CurrentUICulture tại thời gian chạy
- 4. WPF + PRISM Cách thay đổi vùng tại thời gian chạy
- 5. Cách thay đổi vị trí trang tại thời gian chạy
- 6. Thay đổi kích cỡ một THREE.CubeGeometry tại thời gian chạy
- 7. thay đổi Vị trí nhãn tại thời gian chạy
- 8. Thay đổi thuộc tính log4j tại thời gian chạy
- 9. Làm cách nào để tham số hóa @Scheduled (fixedDelay) bằng ngôn ngữ biểu thức Spring 3.0?
- 10. Thay đổi Font trong thời gian chạy
- 11. Thay đổi hướng trong thời gian chạy
- 12. Android cách thay đổi ngôn ngữ ứng dụng tại thời gian chạy
- 13. Cách thích hợp để thay đổi ngôn ngữ tại thời gian chạy
- 14. Thay đổi Cài đặt ứng dụng trong thời gian chạy
- 15. Biến số SSIS tại thời gian chạy
- 16. Tại sao tôi không thể thay đổi biến long_query_time biến tại thời gian chạy
- 17. Android - Thay đổi bố cục đoạn trong thời gian chạy
- 18. Thay đổi ngôn ngữ cho NSLocalizedString() trong thời gian chạy
- 19. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 20. Cách thay đổi thời gian trong DateTime?
- 21. Spring 3.0 - Thời gian chờ thay đổi thời gian chạy của @Transactional
- 22. Làm cho log4j nhận biết được những thay đổi trong cấu hình tại thời gian chạy
- 23. Thay đổi lược đồ cơ sở dữ liệu khuôn khổ thực thể tại thời gian chạy
- 24. Android - Thay đổi Nguồn Chế độ xem Hình ảnh tại thời gian chạy sau vài giây
- 25. Thay đổi tham số của Thuộc tính tại thời gian chạy
- 26. Android - thay đổi chế độ xem tiêu đề tùy chỉnh tại thời gian chạy
- 27. Thay đổi bản đồ thực thể sang bảng "không xác định" khác tại thời gian chạy
- 28. Thay đổi kết cấu của tệp .obj được tải trong ba.js tại thời gian chạy
- 29. Thứ tự cột thay đổi tại thời gian chạy trong DataGridView
- 30. Thay đổi địa chỉ điểm cuối WebService tại thời gian chạy
Tôi thấy bạn đã chấp nhận câu trả lời hay nhất, nhưng tôi vẫn thấy có một số vấn đề chưa được giải quyết. Vấn đề NPE có được giải quyết không? Bạn có thể đăng toàn bộ giải pháp cho điều này không?Chúc mừng – despot
Có thể trùng lặp [Lập lịch công việc với Spring theo lập trình (với fixedRate được đặt động)] (http://stackoverflow.com/questions/14630539/scheduling-a-job-with-spring-programmatically-with-fixedrate-set- động) –