Spring 中Quartz設定資料庫化

來源:互聯網
上載者:User

       因為項目要求根據資料庫的配置資訊啟動Spring中的Quartz的任務,這樣就要求CronTriggerBean是動態多樣的。搜尋了很多文檔也沒有得其所以然,於是從Spring的配置資訊進行入手了。

       網上介紹的各種例子中,預設都是以SchedulerFactoryBean進行開始的,也看到,裡面就一個參數就是triggers,那麼這樣就好說了,只要把trigger根據資料庫中的配置資訊進行產生就好了。

       

<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">            <property name="triggers">                <list>                    <ref bean="doTime"/>                </list>            </property>        </bean>

       虛擬碼就是這樣的,寫個類繼承SchedulerFactoryBean

   

XXXvo = queryDB();CronTriggerBean bean = new CronTriggerBean();bean.setBeanName("beanNameFileSchedule");            bean.setCronExpression(xxxvo.getCronExpression());            jobDetailFactoryBean.setArguments(new Object[] { XXX});                bean.setJobDetail((JobDetail) jobDetailFactoryBean.getObject());            bean.afterPropertiesSet();this.setTriggers((CronTriggerBean[]) this.triggerBeanList                .toArray(new CronTriggerBean[0]));        this.afterPropertiesSet();

  這樣基本上就大功告成了,但是調試過程中的小問題卻不少。

第一:CronTriggerBean和SchedulerFactoryBean都實現了InitializingBean介面,這樣的話,需要在兩個類的設定完屬性之後,需要手動的調用afterPropertiesSet的方法。

第二:CronTriggerBean需要設定BeanName,原因看一下CronTriggerBean方法的afterPropertiesSet就知道了,quartz的trigger如果沒有Name的話,就會報出來錯誤。

第三:Schedule的執行類配置到了Spring的XML中,但又因Schedule的執行類的執行方法有參數,這個參數又是動態傳入的。這樣的一個問題就是在SchedulerFactoryBean中調用下面的方法【jobDetailFactoryBean.setArguments(new Object[] { XXX});】設定參數的時候就已經晚了,因為Spring在執行個體化MethodInvokingJobDetailFactoryBean的時候就會報出來找不到方法的錯誤。現在的處理方式就是先在XML中為MethodInvokingJobDetailFactoryBean配置一個假的參數進去,只是為了佔據類型,然後在SchedulerFactoryBean中重新設定一遍,設定完成後,不能忘記調用afterPropertiesSet()方法,不然trigger不起作用。

 

     寫的稍微亂了一些,就先記錄下來吧,後續再整理了。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.