Dependency
- 建立 Spring Boot project 時於
I/O
分類中選擇 Quartz Scheduler
- pom.xml 中加入
Config
Spring Quartz Config
Quartz Config
- 定義使用的 DB
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=
- org.quartz.impl.jdbcjobstore.StdJDBCDelegate ( Default, MySQL )
- org.quartz.impl.jdbcjobstore.MSSQLDelegate
- org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
- org.quartz.impl.jdbcjobstore.WebLogicDelegate
- org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
- org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate
- org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
- org.quartz.impl.jdbcjobstore.CloudscapeDelegate
- org.quartz.impl.jdbcjobstore.DB2v6Delegate
- org.quartz.impl.jdbcjobstore.DB2v7Delegate
- org.quartz.impl.jdbcjobstore.DB2v8Delegate
- org.quartz.impl.jdbcjobstore.HSQLDBDelegate
- org.quartz.impl.jdbcjobstore.PointbaseDelegate
- org.quartz.impl.jdbcjobstore.SybaseDelegate
使用
Spring Quartz 已經針對 Scheduler 做好 Auto-Configured,使用時透過 @Autowired 注入
Quartz 主要以三個部分組成
Job
- 用於定義實質排程要執行的內容,如寄信、CRUD 等。
- 建立
- 建立 Job class 並 extends QuartzJobBean
- override executeInternal(JobExecutionContext context) method
- 若有透過 傳送資料,可使用 JobExecutionContext 接收。
- bussiness logic 放在 method 內
2. JobDetail
- 用於指定使用的 Job,可透過 JobDetail 做命名、分組,並加以存取 ( DB / in Memory )
- 可使用 setJobData(jobDataMap) Method 透過 JobDataMap Object 傳值到 Job。
3. Trigger
- 用於定義觸發時機並與 JobDetail 綁定使用,可設定排程執行時段或立刻執行。
Controller
Issues
- 若當下有多個觸發時間超過設定
startAt()
的 Trigger 時,Job 執行次數似乎會有異常,待確認。
Reference
Spring Boot Document
Quartz config
https://www.796t.com/content/1541907006.html