首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 環境整合 Quartz 排程器實戰指南(二)

     編輯:Java 相關知識

前情提要

承接第一篇,已定義 EJB 業務方法與 Quartz Servlet。本文完成自動啟動、打包部署、容器執行緒配置與驗證。

3. 自動啟動 Servlet 配置

在 web.xml 註冊兩個 Servlet,並設定 load-on-startup 確保容器啟動時初始化:

<servlet>
  <servlet-name>QuartzInitializer</servlet-name>
  <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
  <servlet-name>QuartzServlet</servlet-name>
  <servlet-class>howto.quartz.servlet.QuartzServlet</servlet-class>
  <init-param>
    <param-name>cronExpr</param-name>
    <param-value>0 0/30 * * * ?</param-value> <!-- 每 30 分鐘 -->
  </init-param>
  <load-on-startup>2</load-on-startup>
</servlet>

QuartzServlet 需透過 JNDI 查找 EJB,故需在 web.xml 宣告 ejb-ref:

<ejb-ref>
  <ejb-ref-name>ejb/TestEJB</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <home>howto.quartz.ejb.TestEJBHome</home>
  <remote>howto.quartz.ejb.TestEJB</remote>
</ejb-ref>

4. 組裝打包為 EAR

  • WAR 模組:包含 quartz.jar、commons-logging.jar、commons-pool.jar 於 WEB-INF/lib;quartz.properties 置於 WEB-INF/classes。
  • EJB-JAR 模組:包含 TestEJB 實作與介面。
  • 兩者打包為 quartz-app.ear 部署至 J2EE 容器(文中以 OC4J 為例)。

5. 啟用容器使用者執行緒

Quartz 使用自身執行緒池,非容器管理執行緒。OC4J 需以 -userThreads 參數啟動:

java -jar oc4j.jar -userThreads

其他容器請參閱對應文件啟用「非受管執行緒」或「使用者執行緒」選項。

6. 部署與自動啟動設定

server.xml:

<application name="quartz" path="../applications/quartz-app.ear" auto-start="true"/>

http-web-site.xml:

<web-app application="quartz" name="quartz-web" load-on-startup="true" root="/quartz"/>

7. 驗證

部署完成後,EJB 的 yourMethod() 將依 Cron 運算式(每 30 分鐘)自動被觸發執行。

8. 參考資源

補充:生產環境注意事項

  1. 叢集模式:多節點部署時,需設定 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 共享資料庫鎖定。
  2. quartz.properties 調優:threadPool.threadCount、jobStore.misfireThreshold。
  3. EJB 方法若拋出 RuntimeException,Quartz 預設會重試,建議冪等設計。
  4. 監控:整合 Quartz JMX MBean 或 Spring Boot Actuator 觀測排程狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved