這篇文章主要為大家展示了Spring怎么整合Quartz開發,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
xml文件配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!--加載數據庫連接的配置文件--> <!--<context:property-placeholder location="jdbc.properties"></context:property-placeholder>--> <!-- c3p0:數據源配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/quartz?Unicode=true&characterEncoding=UTF-8"/> <property name="user" value="root"/> <property name="password" value="root"/> <property name="initialPoolSize" value="3"/> <property name="minPoolSize" value="2"/> <property name="maxPoolSize" value="10"/> <property name="maxIdleTime" value="60"/> <property name="acquireRetryDelay" value="1000"/> <property name="acquireRetryAttempts" value="10"/> <property name="preferredTestQuery" value="SELECT 1"/> </bean> <bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="quartz.properties"></property> <!-- <property name="triggers"></property>--> </bean> </beans>
public class SimpleJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println(new Date()+"執行SimpleJob"); } }
public class ApplicationContextTest { public static Scheduler scheduler; public static void main(String[] args) throws Exception { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext-trigger.xml"); scheduler = (Scheduler) applicationContext.getBean("quartzScheduler"); //SimpleJob simpleJob = new SimpleJob(); scheduler.start(); //從數據庫中獲取相應的job及調度信息 //JobDetail jobDetail = scheduler.getJobDetail(new JobKey("trigger1", "trigger1")); //resumeJob(jobDetail.getKey().getName(), jobDetail.getKey().getGroup()); //添加job執行 addJob("trigger1", "trigger1", "job1", "job2", "0/20 * * * * ?", SimpleJob.class, new HashMap<>()); Thread.sleep(60 * 1000); //重新設置調度時間 System.out.println("重新設置調度時間"); rescheduleJob("trigger1","trigger1","0/10 * * * * ?"); Thread.sleep(60 * 1000); //暫停調度 System.out.println("暫停調度"); pauseJob("trigger1","trigger1"); Thread.sleep(60 * 1000); System.out.println("恢復調度"); resumeJob("trigger1","trigger1"); Thread.sleep(60 * 1000); System.out.println("刪除調度"); removeJob("trigger1","trigger1"); Thread.sleep(60 * 1000); System.out.println(scheduler); } /** * 添加job執行 * * @param triggerKeyName * @param triggerKeyGroup * @param jobName * @param jobGroup * @param cronExpression * @param jobClass * @param jobData * @return * @throws Exception */ public static boolean addJob(String triggerKeyName, String triggerKeyGroup, String jobName, String jobGroup, String cronExpression, Class<? extends Job> jobClass, Map<String, Object> jobData) throws Exception { JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(triggerKeyName, triggerKeyGroup).build(); Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).withIdentity(triggerKeyName, triggerKeyGroup).build(); if (jobData != null && jobData.size() > 0) { JobDataMap jobDataMap = jobDetail.getJobDataMap(); jobDataMap.putAll(jobData); // JobExecutionContext context.getMergedJobDataMap().get("mailGuid"); } scheduler.scheduleJob(jobDetail, trigger); // if (!scheduler.isShutdown()) { // scheduler.start(); // } return true; } /** * 重新設置job執行 * @param triggerKeyName * @param triggerKeyGroup * @param cronExpression * @return * @throws SchedulerException */ public static boolean rescheduleJob(String triggerKeyName, String triggerKeyGroup, String cronExpression) throws SchedulerException { TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup); if (scheduler.checkExists(triggerKey)) { Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).withIdentity(triggerKey).build(); scheduler.rescheduleJob(triggerKey, trigger); } return true; } /** * 刪除job * @param triggerKeyName * @param triggerKeyGroup * @return * @throws SchedulerException */ public static boolean removeJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup); boolean result = false; if (scheduler.checkExists(triggerKey)) { result = scheduler.unscheduleJob(triggerKey); } return result; } /** * 暫停job * @param triggerKeyName * @param triggerKeyGroup * @return * @throws SchedulerException */ public static boolean pauseJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup); boolean result = false; if (scheduler.checkExists(triggerKey)) { scheduler.pauseTrigger(triggerKey); result = true; } else { } return result; } /** * 重啟job * @param triggerKeyName * @param triggerKeyGroup * @return * @throws SchedulerException */ public static boolean resumeJob(String triggerKeyName, String triggerKeyGroup) throws SchedulerException { TriggerKey triggerKey = TriggerKey.triggerKey(triggerKeyName, triggerKeyGroup); boolean result = false; if (scheduler.checkExists(triggerKey)) { scheduler.resumeTrigger(triggerKey); result = true; } else { } return result; } }
quart.properties正常配置信息,然后點擊運行即可。
本實例中當運行的任務在暫停的情況下,一旦重新恢復,會將暫停期間的任務運行如圖:
以上就是關于Spring怎么整合Quartz開發的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。