1. pom文件添加依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!--<!– druid數據庫連接池 –>--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> </dependencies>
2. yml配置
spring: datasource: url: jdbc:mysql://localhost:3306/aipyun?serverTimezone=GMT&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: root123 driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: initialSize: 2 minIdle: 2 maxActive: 30 #StatViewServlet: #loginUsername: admin #loginPassword: admin quartz: #相關屬性配置 properties: org: quartz: scheduler: instanceName: DefaultQuartzScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate tablePrefix: QRTZ_ isClustered: false clusterCheckinInterval: 10000 useProperties: true threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true dataSource: default: URL: jdbc:mysql://localhost:3306/aipyun?characterEncoding=utf-8 user: root password: root123 driver: com.mysql.jdbc.Driver #數據庫方式 job-store-type: jdbc #初始化表結構 #jdbc: #initialize-schema: never
我們可以對比下這個配置文件和之前的quartz.properties的區別,基本一模一樣,只不過寫的格式不一樣而已。
3. 業務邏輯代碼
/** * 刪除job * * @param triggerName 觸發器名稱 * @param triggerGroup 觸發器分組 * @param jobName 任務名稱 * @param jobGroup 任務分組 * @throws SchedulerException */ public void deleteJob(String triggerName, String triggerGroup, String jobName, String jobGroup) throws SchedulerException { TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroup); scheduler.pauseTrigger(triggerKey); scheduler.unscheduleJob(triggerKey); JobKey jobKey = JobKey.jobKey(jobName, jobGroup); scheduler.deleteJob(jobKey); } /** * 修改定時任務 * * @param oldTriggerKey 需要修改的TriggerKey 也就是唯一標識 * @param cron 新的cron表達式 */ public void updateJob(TriggerKey oldTriggerKey, String cron) { CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron); CronTrigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity(oldTriggerKey).withSchedule(scheduleBuilder).build(); try { scheduler.rescheduleJob(oldTriggerKey, cronTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 新增job任務 * * @param jobName job名稱 * @param jobGroupName job分組名稱 * @param triggerName 觸發器名稱 * @param triggerGroupName 觸發器分組名稱 * @param jobClass 需要執行的job.class * @param cron cron 表達式 * @throws SchedulerException */ public void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class jobClass, String cron) throws SchedulerException { CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron); JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build(); Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroupName) .withSchedule(cronScheduleBuilder).build(); scheduler.scheduleJob(jobDetail, trigger); }
關於spring-boot-starter-quartz
鄙人用的開發工具是idea,可以直接查看源碼,至於用eclispe的怎么查看源碼我就不知道了。
我們找到Idea的External Libraries並且展開spring-boot-autoconfigure-2.0.0.RELEASE.jar,找到org.springframework.boot.autoconfigure.quartz,該目錄就是SpringBoot為我們提供的Quartz自動化配置源碼實現,在該目錄下有如下所示幾個類:
QuartzAutoConfiguration該類是自動配置的主類,內部配置了SchedulerFactoryBean,相當於我們之前自己配的SchedulerFactoryBean類。
JobStoreType是一個枚舉:表示quartz的存儲方式:RAM 或者JDBC。
QuartzProperties配置類:從yml或者properties中讀取配置信息。
