1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      怎么理解Quartz中的JobStore接口

      怎么理解Quartz 中的JobStore接口,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

      成都創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千家服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

      • org.quartz.spi.JobStore 是任務(wù)存儲(chǔ)的頂層接口類

      • org.quartz.simpl.RAMJobStore 是內(nèi)存存儲(chǔ)機(jī)制實(shí)現(xiàn)類

      • org.quartz.impl.jdbcjobstore.JobStoreSupport 是基于JDBC數(shù)據(jù)庫(kù)存儲(chǔ)的抽象類

      • org.quartz.impl.jdbcjobstore.JobStoreCMT 是受應(yīng)用容器管理事物的數(shù)據(jù)庫(kù)存儲(chǔ)實(shí)現(xiàn)類

      • org.quartz.impl.jdbcjobstore.JobStoreTX 是不受應(yīng)用容器事物管理的數(shù)據(jù)庫(kù)存儲(chǔ)實(shí)現(xiàn)類

      org.quartz.jobStore.class = 上面提到的具體實(shí)現(xiàn)類

      在quzrtz.properties 中配置以上代碼來告訴quartz我們使用何種存儲(chǔ)機(jī)制

      存儲(chǔ)機(jī)制對(duì)比

      內(nèi)存存儲(chǔ)機(jī)制
      org.quartz.simpl.RAMJobStore
      使用內(nèi)存存儲(chǔ)的優(yōu)點(diǎn)是任務(wù)的存儲(chǔ)和讀取的速度極快,和數(shù)據(jù)庫(kù)持久化相比差別還是非常大的,而且框架搭建簡(jiǎn)單,開箱即用。它的缺點(diǎn)是當(dāng)Quartz程序或應(yīng)用程序停止了,伴隨在內(nèi)存中的數(shù)據(jù)也會(huì)被回收,任務(wù)等數(shù)據(jù)就永久丟失了。
      數(shù)據(jù)庫(kù)存儲(chǔ)機(jī)制
      org.quartz.impl.jdbcjobstore.JobStoreTX
      TX就是事物的意思,此存儲(chǔ)機(jī)制用于Quartz獨(dú)立于應(yīng)用容器的事物管理,如果是Tomcat容器管理的數(shù)據(jù)源,那我們定義的事物也不會(huì)傳播給Quartz框架內(nèi)部。通俗的講就是不管我們的Service服務(wù)本身業(yè)務(wù)代碼是否執(zhí)行成功,只要代碼中調(diào)用了Quartz API的數(shù)據(jù)庫(kù)操作,那任務(wù)狀態(tài)就永久持久化了,就算業(yè)務(wù)代碼拋出運(yùn)行時(shí)異常任務(wù)狀態(tài)也不會(huì)回滾到之前的狀態(tài)。
      
      org.quartz.impl.jdbcjobstore.JobStoreCMT
      CMT的全稱是Container Managed Transactions,表示容器管理事物,也就是讓應(yīng)用容器托管事物。這里假設(shè)應(yīng)用容器是Tomcat,并且項(xiàng)目和Quartz都是使用Tomcat配置的數(shù)據(jù)源,那么項(xiàng)目和Quartz的代碼中就可以共用同一個(gè)事物,不管是業(yè)務(wù)代碼還是Quartz內(nèi)部拋出異常,Service服務(wù)內(nèi)的所有數(shù)據(jù)操作都會(huì)回滾到原始狀態(tài)。JobStoreCMT和JobStoreTX最大的區(qū)別是JobStoreCMT需要配置兩個(gè)數(shù)據(jù)源,一個(gè)是受應(yīng)用容器管理的數(shù)據(jù)源,還有一個(gè)是不受應(yīng)用容器管理的數(shù)據(jù)源。
      這里需要想一想為什么需要兩個(gè)數(shù)據(jù)源?
      我個(gè)人的理解是不受應(yīng)用容器管理的數(shù)據(jù)源用來由Quartz內(nèi)部進(jìn)行"增刪改查",假如一個(gè)觸發(fā)器已失效,那么Quartz框架內(nèi)部就會(huì)自動(dòng)刪除這個(gè)觸發(fā)器并提交事物,而無需開發(fā)人員的項(xiàng)目代碼來處理,全由Quartz內(nèi)部管理。

      選用哪種存儲(chǔ)方式

              什么情況下使用RAMJobStore內(nèi)存存儲(chǔ)方式呢?

      ??根據(jù)開發(fā)中的使用經(jīng)驗(yàn),發(fā)現(xiàn)有些任務(wù)是隨著項(xiàng)目啟動(dòng)而啟動(dòng)的,就算項(xiàng)目關(guān)閉或系統(tǒng)宕機(jī),那也沒關(guān)系,因?yàn)轫?xiàng)目重新啟動(dòng)后此任務(wù)又會(huì)隨之啟動(dòng)。如果項(xiàng)目中只存在這類任務(wù),那么就可以用內(nèi)存存儲(chǔ)。隨著項(xiàng)目啟動(dòng)有幾種常用的實(shí)現(xiàn)方式,第一種是通過實(shí)現(xiàn)ServletContextListener監(jiān)聽器接口,然后在接口實(shí)現(xiàn)類的contextInitialized()方法中編寫啟動(dòng)Job的硬編碼;第二種是通過Quartz的XML配置文件啟動(dòng)任務(wù)。

              什么情況下使用JobStoreTX數(shù)據(jù)庫(kù)存儲(chǔ)方式呢?

      ?使用這種方式需要注意的是,如果在一個(gè)業(yè)務(wù)代碼中需要?jiǎng)?chuàng)建一個(gè)Job,那么請(qǐng)把創(chuàng)建Job的代碼編寫在服務(wù)代碼的最后面,確保業(yè)務(wù)代碼運(yùn)行成功并且沒有拋異常再去啟動(dòng)Job,如果啟動(dòng)Job失敗的時(shí)候請(qǐng)拋出一個(gè)運(yùn)行時(shí)異常使業(yè)務(wù)代碼進(jìn)行回滾。
      例子:

      @Transactional
      public void demoService(TaskStore taskStore) {
          // 先執(zhí)行插入業(yè)務(wù)操作
          taskStoreService.insert(taskStore);
          // 再執(zhí)行更新業(yè)務(wù)操作
          taskDetailService.update(taskDetail);
          // 最后啟動(dòng)定時(shí)任務(wù)
          QuartzUtils.addJob("testName", DemoJob.class, "0 * * * * * ?");
      }

      注意例子中的addJob()方法中捕獲了異常后進(jìn)行重新封裝再拋出運(yùn)行時(shí)異常的,目的是Quartz內(nèi)部錯(cuò)誤時(shí)確保業(yè)務(wù)代碼回滾。

              什么情況下使用JobStoreCMT數(shù)據(jù)庫(kù)存儲(chǔ)方式呢?

      ??JobStoreCMT和JobStoreTX的區(qū)別前文已經(jīng)介紹了,在實(shí)際開發(fā)的過程中我還沒有在項(xiàng)目中使用過此種方式。一般情況下都是使用的JobStoreTX。如果大家的項(xiàng)目中有著嚴(yán)格的事物管理,那么建議使用JobStoreCMT存儲(chǔ)方式。

      @Component
      public  class JobFactory extends AdaptableJobFactory {
          @Autowired
          private AutowireCapableBeanFactory  capableBeanFactory;
          @Override
          protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
              // 調(diào)用父類的方法
              Object jobInstance = super.createJobInstance(bundle);
              // 進(jìn)行注入
              capableBeanFactory.autowireBean(jobInstance);
              return jobInstance;
          }
      }
      
      這個(gè)類的作用就是講Job的實(shí)例化交給IOC去進(jìn)行。
      其實(shí)問題在于:
      Job對(duì)象的實(shí)例化過程是在Quartz中進(jìn)行的,注入的實(shí)體類是在Spring容器當(dāng)中的 所以在job中無法注入Srping容器的實(shí)體類。
      解決方案:將Job Bean也納入到Spring容器的管理之中,Spring容器自然能夠?yàn)镴ob Bean自動(dòng)裝配好所需的依賴。
      如何納入:Job的創(chuàng)建都是通過JobFactory創(chuàng)建的。
      
      官網(wǎng)解釋為證:
      翻譯:JobFactory負(fù)責(zé)生成Job類的實(shí)例。
      JobFactory 有2個(gè)實(shí)現(xiàn)類:AdaptableJobFactory 和 SimpleJobFactory。
      自定義的工廠類 JobFactory 繼承 AdaptableJobFactory 。
      通過調(diào)用父類 AdaptableJobFactory 的方法createJobInstance來實(shí)現(xiàn)對(duì)Job的實(shí)例化。
      在Job實(shí)例化完以后,再調(diào)用自身方法為創(chuàng)建好的Job實(shí)例進(jìn)行屬性自動(dòng)裝配并將其納入到Spring容器的管理之中。(通過AutowireCapableBeanFactory納入)。

      看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


      本文題目:怎么理解Quartz中的JobStore接口
      網(wǎng)頁網(wǎng)址:http://www.ef60e0e.cn/article/pjpsoo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        蒙自县| 霍州市| 二连浩特市| 义马市| 桓台县| 固安县| 武宣县| 莎车县| 巴东县| 沛县| 益阳市| 建始县| 胶州市| 昂仁县| 汨罗市| 嘉兴市| 清水河县| 板桥市| 西峡县| 沁阳市| 长乐市| 崇信县| 广德县| 永胜县| 荥经县| 若羌县| 郎溪县| 保康县| 桃园县| 嘉兴市| 兴义市| 友谊县| 嘉义县| 禄劝| 萨迦县| 顺义区| 北海市| 清涧县| 云浮市| 曲周县| 多伦县|