2011-01-25 33 views
7

Chúng tôi đang xây dựng một ứng dụng xung quanh MongoDB và cần phải chạy các công việc giống như cron theo định kỳ. Tôi đã sử dụng Quartz trước đây cho loại điều này khi các dự án được dựa trên một RDBMS với JDBC.làm cho lịch trình Quartz liên tục tồn tại mà không cần JDBC

Vì chúng tôi đã sử dụng MongoDB cho kho dữ liệu chính của chúng tôi trong dự án này, tôi không muốn giới thiệu RDBMS chỉ đơn giản là để tiếp tục công việc Quartz, nhưng dường như không có bất kỳ loại JobStore implementatiom nào cho MongoDB.

Có ai có thể giới thiệu cách quay lại Quartz với MongoDB hay thay thế đơn giản cho Quartz? Nhu cầu của tôi khá đơn giản (chạy nhiều công việc java với một số cách cấu hình, à la cron).

+0

Tôi không biết bất kỳ sản phẩm nào như vậy, nhưng sau đó tôi chưa bao giờ nghe nói về Quartz trước ngày hôm nay. Do có một giao diện [JobStore] (http://www.docjar.com/docs/api/org/quartz/spi/JobStore.html) rõ ràng, có vẻ như bạn sẽ có thể sử dụng Trình điều khiển Java MongoDB và thực hiện một cửa hàng như vậy. Không tốt bằng "tự do và làm việc", nhưng tôi không chắc bạn sẽ tìm thấy một thứ như vậy vào thời điểm này. –

+0

Thực hiện giao diện JobStore là tùy chọn cho Quartz - bạn chỉ cần nếu (1) bạn đang chạy trong một môi trường nhóm hoặc (2) bạn sử dụng các thuộc tính công việc bền vững cần được giữ lại giữa JVM khởi động lại. Nếu không, chỉ cần khởi tạo bộ lập lịch và thêm công việc vào lúc khởi động. –

Trả lời

3

Chúng tôi chạy thạch anh với Spring và nó chỉ là một tệp XML với các biểu thức cron được xác định và công việc.

Khai báo một công việc trong mùa xuân:

<bean name="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="concurrent" value="false"/> 
    <property name="targetBeanName" value="myBean"/> 
    <property name="targetMethod" value="myScheduledMethod"/> 
    </bean> 

    <bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="myJob"/> 
    <!-- every 30s --> 
    <property name="cronExpression" value="0/30 * * * * ?"/> 
    </bean> 

Quartz Dây:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
     <!-- List of batch jobs to be fed to the scheduler. --> 
     <list> 
     <ref bean="myTrigger"/> 
     </list> 
    </property> 
    </bean> 

Run nó với:

import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class App 
{ 
    public static void main(String[] args) throws Exception 
    { 
     new ClassPathXmlApplicationContext("jobs-context.xml"); 
    } 
} 
+0

Đây là nhiều hơn hoặc ít hơn những gì tôi giải quyết trên. Chúng tôi không sử dụng Spring, vì vậy tôi chỉ trỏ quartz.properties của tôi tại một tệp quartz-config.xml, như được mô tả ở đây: http://www.openscope.net/2010/02/05/quartz-scheduled-jobs/ Cảm ơn bạn đã chỉ cho tôi đúng hướng. –

+6

Đó chỉ là chạy nhúng, phải không? Đó là tốt cho công việc nhất định, nhưng đối với công việc liên tục, đặc biệt là không định kỳ, bạn muốn có một cửa hàng liên tục sao lưu nó để bạn có thể sống sót take-downs vv – Eelco

8

Tôi đã viết một MongoDB JobStore cho thạch anh mà nằm ở đây: https://github.com/mulesoft/quartz-mongodb Nó không hỗ trợ tất cả mọi thứ, nhưng nó hoạt động cho một loạt các trường hợp sử dụng.

+0

Đó là tuyệt vời Dan. Cảm ơn rất nhiều vì đã chia sẻ điều đó. – Eelco

+0

Điều này trông rất thú vị. Cảm ơn. – GreenKiwi

+0

Việc triển khai này có hỗ trợ báo thức định kỳ không? Nó sẽ tải lại trình kích hoạt từ db tự động và lên lịch cho chúng khi khởi động lại ứng dụng? – Gopinath

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