Spring整合Quartz案例使用RAM儲存方式
spring整合quartz有兩種任務儲存方式,RAM儲存方式和JDBC儲存方式,企業開發使用的JDBC儲存方式。
先從RAM儲存方式開始說起
目錄
依賴org.springframework.scheduling.quartz.JobDetailFactoryBean
依賴org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
Jar包依賴
因為整合spring過程中對quartz和spring都有版本上的要求,便於管理使用maven
<!-- quartz 的jar -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<!-- spring相關jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<!-- 日誌相關jar包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.5</version>
</dependency>
<dependency><!-- Failed to load class "org.slf4j.impl.StaticLoggerBinder". -->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<!-- MySql的包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
quartz-config.xml
將quartz的建立交給spring,整合的步驟
建立jobDetail
spring中有兩種方式:
依賴org.springframework.scheduling.quartz.JobDetailFactoryBean
要求任務類必須實現job介面,而且需要將durability屬性配置為true,否則容器初始化時候,因為沒有觸發器和任務關聯會報錯。
工作類:
public class HelloJob implements Job{
public void execute(JobExecutionContext paramJobExecutionContext)
throws JobExecutionException {
System.out.println("觸發simpleScheduler的任務.....");
}
}
<!-- 定義任務1-->
<bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 定義job名稱,group名稱 -->
<property name="name" value="myjob1"></property>
<property name="group" value="group1"></property>
<!-- 指定job類 -->
<property name="jobClass" value="cn.bing.quartz.HelloJob"></property>
<!-- 必須設定為true,當沒有活動的觸發器和任務關聯,排程器會自動刪除任務 -->
<property name="durability" value="true"></property>
<!-- 指定spring上下文容器的key,這樣在execute方法中,就能獲取到上下文,從而獲取到bean -->
<property name="applicationContextJobDataKey" value="applicationContext"></property>
</bean>
依賴org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
不要求任務類必須實現job介面
工作類:
public class TestJob {
public void work(){
System.out.println("北京時間:"+new SimpleDateFormat("yyyyMMdd HH:mm:ss").format(new Date())+"執行cron觸發的任務");
}
}
<bean id="jobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 指定工作類 -->
<property name="targetObject">
<bean class="cn.bing.quartz.TestJob"></bean>
</property>
<!-- 工作類的執行方法 -->
<property name="targetMethod">
<value>work</value>
</property>
</bean>
建立觸發器
建立兩種常見的觸發器simpleTrigger和cronTrigger,分別註冊到上面兩種方式生成的jobDetail
建立SimpleTrigger
<!-- 定義觸發器 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<!-- 定義觸發器名稱 -->
<property name="name" value="trigger1"></property>
<!-- 定義所屬組的名稱 -->
<property name="group" value="group1"></property>
<!-- 執行間隔是5s -->
<property name="repeatInterval" value="5000"></property>
<!-- 執行次數10次 -->
<property name="repeatCount" value="10"></property>
<!-- 繫結的任務 -->
<property name="jobDetail" ref="jobDetail1"></property>
</bean>
建立CronTrigger
<!-- 定義cron觸發器 -->
<!-- 2.2:定義觸發器的bean,定義一個Cron的Trigger,一個觸發器只能和一個任務進行繫結 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 指定Trigger的名稱 -->
<property name="name" value="hw_trigger"/>
<!-- 指定Trigger的名稱 -->
<property name="group" value="hw_trigger_group"/>
<!-- 指定Tirgger繫結的Job -->
<property name="jobDetail" ref="jobDetail2"/>
<!-- 指定Cron 的表示式 ,當前是每隔1s執行一次 -->
<property name="cronExpression" value="0/1 * * * * ?" />
</bean>
定義排程器scheduler
將觸發器註冊到任務中
<!-- 定義排程器,將觸發器註冊到任務中 -->
<bean id="scheduler1" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false"
>
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
測試
public class JunitTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
spring容器建立,就會啟動quartz,觸發任務執行
執行結果:
北京時間:20180802 14:55:25: 執行cron觸發的任務
14:55:25.004 [scheduler1_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
14:55:25.540 [scheduler1_Worker-4] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.myjob1
14:55:25.541 [scheduler1_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
北京時間:20180802 14:55:25: 執行simpleScheduler觸發的任務.....
14:55:26.001 [scheduler1_Worker-5] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.jobDetail2
北京時間:20180802 14:55:26: 執行cron觸發的任務
14:55:26.003 [scheduler1_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
14:55:27.003 [scheduler1_Worker-6] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.jobDetail2
14:55:27.003 [scheduler1_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
北京時間:20180802 14:55:27: 執行cron觸發的任務
參考部落格:https://blog.csdn.net/u010648555/article/details/54891264
原始碼下載:https://download.csdn.net/download/ditto_zhou/10579402
相關文章
- Spring整合Quartz案例使用JDBC儲存方式SpringquartzJDBC
- Quartz - Spring和Quartz的整合quartzSpring
- spring-quartz整合Springquartz
- Spring Boot整合Spring Cloud Vault進行安全儲存Spring BootCloud
- 使用Hazelcast作為Spring資料儲存庫的開源案例ASTSpring
- spring4.x 整合quartz2.x 叢集化配置專案例項Springquartz
- Quartz - Spring整合Quartz實現叢集的定時任務quartzSpring
- Spring Boot:使用Redis儲存技術Spring BootRedis
- Spring Boot 整合阿里雲 OSS 進行檔案儲存Spring Boot阿里
- spring boot使用註解的方式整合mybaitsSpring BootAI
- 使用 .NET 整合 MinIO 實現高效物件儲存物件
- 新興儲存器鐵電RAM嵌入式應用
- 如何實現Spring Boot和Quartz整合? - Nguyen Phuc HaiSpring BootquartzAI
- 使用Spring Boot實現資料庫整合配置案例Spring Boot資料庫
- 使用Spring Data建立只讀儲存庫 | BaeldungSpring
- **微控制器的RAM 和ROM 儲存了哪些東西?**
- Python資料儲存方式有幾種?如何使用?Python
- 【Springboot】快速整合QuartzSpring Bootquartz
- SpringBoot 整合 Quartz + MySQLSpring BootquartzMySql
- Spring整合Mybatis方式二 - SqlSessionTemplateSpringMyBatisSQLSession
- block底層儲存方式BloC
- Spring Boot 整合 Spring Security 入門案例教程Spring Boot
- VSAN儲存結構解析+儲存資料恢復案例資料恢復
- Spring Boot 揭祕與實戰(二) 資料儲存篇 – MyBatis整合Spring BootMyBatis
- 摩杜雲:物件儲存可以透過哪些方式使用?物件
- 日期的正確儲存方式
- Django整合騰訊COS物件儲存Django物件
- JavaScript本地儲存的方式有哪些JavaScript
- Java常見的本地儲存方式Java
- Go操作騰訊雲COS物件儲存的簡單使用案例Go物件
- Quartz.NET整合UI版quartzUI
- (7)ram ip使用
- Spring Cloud Alibaba基礎教程:Sentinel使用Nacos儲存規則SpringCloud
- Spring Cloud Alibaba基礎教程:Sentinel使用Apollo儲存規則SpringCloud
- Android 儲存優化 —— MMKV 整合與原理Android優化
- Laravel 整合 GitHub 來儲存檔案.mdLaravelGithub
- Spring Cloud整合Thrift RPC(二) - 應用案例SpringCloudRPC
- InnoDB儲存引擎鎖機制(一、案例)儲存引擎