quartz通过数据库配置trigger
来源:互联网 发布:罗志祥女友的淘宝店名 编辑:程序博客网 时间:2024/06/01 10:01
通过数据库和配置中心superdimond动态的修改trigger,也可以逻辑删除job。
Spring配置文件如下:
<bean id="" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" p:targetObject-ref="" p:targetMethod="" p:concurrent="true" />或者
<bean id="priceTaskDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject" ref="masterMsgsProceedManage" /><property name="targetMethod" value="processMqSkuPriceMsg" /></bean>
只配置jobDetail,trigger信息通过数据库获得,或通过配置中心。
import com.github.diamond.client.PropertiesConfiguration;import com.github.diamond.client.PropertiesConfigurationFactoryBean;import org.quartz.*;import org.quartz.impl.JobDetailImpl;import org.quartz.impl.triggers.SimpleTriggerImpl;import org.springframework.beans.factory.NoSuchBeanDefinitionException;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import org.springframework.stereotype.Service;import java.util.*;@Servicepublic class SchedulerConfigFactory extends SchedulerFactoryBean{ protected static PropertiesConfiguration config = PropertiesConfigurationFactoryBean.getPropertiesConfiguration(); @Override public void afterPropertiesSet() throws Exception { initTriggers(); initQuartzProperties(); setWaitForJobsToCompleteOnShutdown(true); super.afterPropertiesSet(); } void initTriggers(){ Set<String> keys=config.getProperties().stringPropertyNames(); List<Trigger> list= new ArrayList<Trigger>(); for(String keyName:keys){ if(keyName.startsWith("job_")){ SimpleTriggerImpl simpleTrigger=createSimpleTrigger(keyName,config.getLong(keyName)); if(simpleTrigger!=null){ list.add(simpleTrigger); } } } Trigger[] triggers=new Trigger[list.size()]; setTriggers(list.toArray(triggers)); } void initQuartzProperties(){ Properties quartzProperties = new Properties(); quartzProperties.setProperty("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool"); quartzProperties.setProperty("org.quartz.threadPool.threadCount",config.getString("org.quartz.threadPool.threadCount")); quartzProperties.setProperty("org.quartz.jobStore.misfireThreshold","1000"); setQuartzProperties(quartzProperties); } SimpleTriggerImpl createSimpleTrigger(String jobName,long repeatInterval){ try { JobDetail jobDetail=(JobDetailImpl) SpringBeanUtil.getBean(jobName); SimpleTriggerImpl simpleTrigger=new SimpleTriggerImpl(); simpleTrigger.setName("trigger_"+jobName); simpleTrigger.setGroup(Scheduler.DEFAULT_GROUP); simpleTrigger.setJobKey(jobDetail.getKey()); JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("jobDetail", jobDetail); simpleTrigger.setJobDataMap(jobDataMap); simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 2000)); simpleTrigger.setRepeatInterval(repeatInterval); simpleTrigger.setRepeatCount(-1); return simpleTrigger; }catch (NoSuchBeanDefinitionException e){ logger.error("NoSuchBeanDefinitionException,jobBeanName:" +jobName); return null; } }}
监听
import com.github.diamond.client.event.ConfigurationEvent;import com.github.diamond.client.event.ConfigurationListener;import lombok.extern.slf4j.Slf4j;import org.quartz.Scheduler;import org.quartz.TriggerKey;import org.quartz.impl.StdScheduler;import org.quartz.impl.triggers.SimpleTriggerImpl;import org.springframework.stereotype.Service;@Service@Slf4jpublic class SchedulerConfigListener implements ConfigurationListener { @Override public void rescheduleJob(ConfigurationEvent event) { try { String configKey = event.getPropertyName(); String configValue = event.getPropertyValue().toString(); StdScheduler scheduler=SpringUtil.getBean(StdScheduler.class); TriggerKey triggerKey = new TriggerKey(configKey,Scheduler.DEFAULT_GROUP); SimpleTriggerImpl trigger = (SimpleTriggerImpl) scheduler.getTrigger(triggerKey); trigger.setRepeatInterval(Long.valueOf(configValue)); scheduler.rescheduleJob(triggerKey, trigger); } catch (Exception e) { log.info("监听配置修改异常:{}", e); } }}
数据库实现
create table `project_config` ( `config_id` int(11) not null auto_increment, `config_key` varchar(64) not null, `config_value` longtext not null, `config_type` int(1) not null, `config_desc` varchar(256) default null, `project_id` varchar(256) default null, `delete_flag` int(1) default '0', `opt_user` varchar(32) default null, `opt_time` datetime default null, primary key (`config_id`)) engine=innodb auto_increment=11780 default charset=utf8
只支持SimpleTriggerImpl,可以添加功能支持CronTriggerImpl
官方Quartz API
阅读全文
0 0
- quartz通过数据库配置trigger
- quartz 通过数据库配置cronExpression
- Quartz Trigger
- Quartz.NET--Trigger 触发器
- Quartz (三) Trigger
- Quartz.NET--Trigger 触发器
- Quartz教程四:Trigger
- Quartz教程四:Trigger
- Quartz之Trigger
- Quartz教程四:Trigger
- Quartz教程四:Trigger
- Quartz与Trigger初探
- quartz教程-触发器Trigger
- Quartz-Trigger详解
- 数据库 Trigger
- Quartz-Spring集成Quartz通过XML配置的方式
- Quartz-Spring集成Quartz通过注解配置的方式
- quartz jobdetail trigger定时任务
- 多个tomcat之间实现Session共享
- 二维数组中的查找
- 简单介绍STM8S003K3T6C的相关知识:
- Vue——mixins
- 多线程死锁问题分析和解决[java]
- quartz通过数据库配置trigger
- Android 实现开机自启动无界面的Apk
- solr中solrconfig.xml详解
- 点击元素外的地方,隐藏该元素
- usb 3.0 linux libusb 问题
- ElementUI安装
- Mac环境下安装MySQL
- spring boot项目实战:事务
- 多线程:线程通信