quartz之简单应用二
来源:互联网 发布:粉笔公考电脑版mac 编辑:程序博客网 时间:2024/05/20 23:36
quartz简单应用一后续
quartz简单应用一中的使用不便于管理,比如job详细信息,job的运行信息等等,所以我们来看看quartz更为方便的应用以及持久化。
一:持久化
持久化就需要把quartz的相关数据保存到数据库中,quartz其实自带了数据库表创建SQL,支持oracle,mysql等,下载quartz的包中可以找到,选择自己适合的应用。这里提供一份MySQL的SQL。
SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `qrtz_blob_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_blob_triggers`;CREATE TABLE `qrtz_blob_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `BLOB_DATA` blob, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `SCHED_NAME` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_blob_triggers-- ------------------------------ ------------------------------ Table structure for `qrtz_calendars`-- ----------------------------DROP TABLE IF EXISTS `qrtz_calendars`;CREATE TABLE `qrtz_calendars` ( `SCHED_NAME` varchar(120) NOT NULL, `CALENDAR_NAME` varchar(200) NOT NULL, `CALENDAR` blob NOT NULL, PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_calendars-- ------------------------------ ------------------------------ Table structure for `qrtz_cron_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_cron_triggers`;CREATE TABLE `qrtz_cron_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `CRON_EXPRESSION` varchar(120) NOT NULL, `TIME_ZONE_ID` varchar(80) DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_cron_triggers-- ------------------------------ ------------------------------ Table structure for `qrtz_fired_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_fired_triggers`;CREATE TABLE `qrtz_fired_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `ENTRY_ID` varchar(95) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `INSTANCE_NAME` varchar(200) NOT NULL, `FIRED_TIME` bigint(13) NOT NULL, `SCHED_TIME` bigint(13) NOT NULL, `PRIORITY` int(11) NOT NULL, `STATE` varchar(16) NOT NULL, `JOB_NAME` varchar(200) DEFAULT NULL, `JOB_GROUP` varchar(200) DEFAULT NULL, `IS_NONCONCURRENT` varchar(1) DEFAULT NULL, `REQUESTS_RECOVERY` varchar(1) DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`), KEY `IDX_QRTZ_FT_TRIG_INST_NAME` (`SCHED_NAME`,`INSTANCE_NAME`), KEY `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME`,`INSTANCE_NAME`,`REQUESTS_RECOVERY`), KEY `IDX_QRTZ_FT_J_G` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`), KEY `IDX_QRTZ_FT_JG` (`SCHED_NAME`,`JOB_GROUP`), KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_fired_triggers-- ------------------------------ ------------------------------ Table structure for `qrtz_job_details`-- ----------------------------DROP TABLE IF EXISTS `qrtz_job_details`;CREATE TABLE `qrtz_job_details` ( `SCHED_NAME` varchar(120) NOT NULL, `JOB_NAME` varchar(200) NOT NULL, `JOB_GROUP` varchar(200) NOT NULL, `DESCRIPTION` varchar(250) DEFAULT NULL, `JOB_CLASS_NAME` varchar(250) NOT NULL, `IS_DURABLE` varchar(1) NOT NULL, `IS_NONCONCURRENT` varchar(1) NOT NULL, `IS_UPDATE_DATA` varchar(1) NOT NULL, `REQUESTS_RECOVERY` varchar(1) NOT NULL, `JOB_DATA` blob, PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`), KEY `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`,`REQUESTS_RECOVERY`), KEY `IDX_QRTZ_J_GRP` (`SCHED_NAME`,`JOB_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_job_details-- ------------------------------ ------------------------------ Table structure for `qrtz_locks`-- ----------------------------DROP TABLE IF EXISTS `qrtz_locks`;CREATE TABLE `qrtz_locks` ( `SCHED_NAME` varchar(120) NOT NULL, `LOCK_NAME` varchar(40) NOT NULL, PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_locks-- ----------------------------INSERT INTO `qrtz_locks` VALUES ('scheduler', 'STATE_ACCESS');INSERT INTO `qrtz_locks` VALUES ('scheduler', 'TRIGGER_ACCESS');-- ------------------------------ Table structure for `qrtz_paused_trigger_grps`-- ----------------------------DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;CREATE TABLE `qrtz_paused_trigger_grps` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_paused_trigger_grps-- ------------------------------ ------------------------------ Table structure for `qrtz_scheduler_state`-- ----------------------------DROP TABLE IF EXISTS `qrtz_scheduler_state`;CREATE TABLE `qrtz_scheduler_state` ( `SCHED_NAME` varchar(120) NOT NULL, `INSTANCE_NAME` varchar(200) NOT NULL, `LAST_CHECKIN_TIME` bigint(13) NOT NULL, `CHECKIN_INTERVAL` bigint(13) NOT NULL, PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_scheduler_state-- ----------------------------INSERT INTO `qrtz_scheduler_state` VALUES ('scheduler', 'aishaonan0011510731271550', '1510734769659', '15000');-- ------------------------------ Table structure for `qrtz_simple_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_simple_triggers`;CREATE TABLE `qrtz_simple_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `REPEAT_COUNT` bigint(7) NOT NULL, `REPEAT_INTERVAL` bigint(12) NOT NULL, `TIMES_TRIGGERED` bigint(10) NOT NULL, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_simple_triggers-- ------------------------------ ------------------------------ Table structure for `qrtz_simprop_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_simprop_triggers`;CREATE TABLE `qrtz_simprop_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `STR_PROP_1` varchar(512) DEFAULT NULL, `STR_PROP_2` varchar(512) DEFAULT NULL, `STR_PROP_3` varchar(512) DEFAULT NULL, `INT_PROP_1` int(11) DEFAULT NULL, `INT_PROP_2` int(11) DEFAULT NULL, `LONG_PROP_1` bigint(20) DEFAULT NULL, `LONG_PROP_2` bigint(20) DEFAULT NULL, `DEC_PROP_1` decimal(13,4) DEFAULT NULL, `DEC_PROP_2` decimal(13,4) DEFAULT NULL, `BOOL_PROP_1` varchar(1) DEFAULT NULL, `BOOL_PROP_2` varchar(1) DEFAULT NULL, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of qrtz_simprop_triggers-- ------------------------------ ------------------------------ Table structure for `qrtz_triggers`-- ----------------------------DROP TABLE IF EXISTS `qrtz_triggers`;CREATE TABLE `qrtz_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(200) NOT NULL, `TRIGGER_GROUP` varchar(200) NOT NULL, `JOB_NAME` varchar(200) NOT NULL, `JOB_GROUP` varchar(200) NOT NULL, `DESCRIPTION` varchar(250) DEFAULT NULL, `NEXT_FIRE_TIME` bigint(13) DEFAULT NULL, `PREV_FIRE_TIME` bigint(13) DEFAULT NULL, `PRIORITY` int(11) DEFAULT NULL, `TRIGGER_STATE` varchar(16) NOT NULL, `TRIGGER_TYPE` varchar(8) NOT NULL, `START_TIME` bigint(13) NOT NULL, `END_TIME` bigint(13) DEFAULT NULL, `CALENDAR_NAME` varchar(200) DEFAULT NULL, `MISFIRE_INSTR` smallint(2) DEFAULT NULL, `JOB_DATA` blob, PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `IDX_QRTZ_T_J` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`), KEY `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`), KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`), KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`), KEY `IDX_QRTZ_T_STATE` (`SCHED_NAME`,`TRIGGER_STATE`), KEY `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`), KEY `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`), KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`), KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`), KEY `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`), KEY `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_STATE`), KEY `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_GROUP`,`TRIGGER_STATE`), CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二:quartz.properties配置
#============================================================== #Configure Main Scheduler Properties #============================================================== org.quartz.scheduler.instanceName = TestScheduler1org.quartz.scheduler.instanceId = AUTO#============================================================== #Configure ThreadPool #============================================================== org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 5org.quartz.threadPool.threadPriority = 5#============================================================== #Configure JobStore #============================================================== org.quartz.jobStore.misfireThreshold = 60000org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.isClustered = trueorg.quartz.jobStore.clusterCheckinInterval = 15000#============================================================== #Non-Managed Configure Datasource #==============================================================
第一块 调度器的属性,name是可以是自己定义的字符,如果是有多个调度器用来区分多个调度器,id属性给AUTH意思是自动生成一个唯一ID。
第二块 线程池配置 第一行处理job可以使用多少线程。第二行线程优先级,默认值值是5。
第三块 数据库配置 与上面的表相对应。
第四块 第一行打开集群设置。第二行 设置一个频度(毫秒),用于实例报告给集群中的其他实例。这会影响到侦测失败实例的敏捷度。它只用于设置了 isClustered 为 true 的时候。
更多可以参考 大佬的文章
三: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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 声明任务工厂 --> <bean id="scheduler" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:quartz.properties" /><property name="applicationContextSchedulerContextKey" value="applicationContextKey"/> </bean> </beans>
四 Interface
import java.util.List;import com.wangsong.system.model.ScheduleJob;public interface ScheduleJobService{public void add(ScheduleJob scheduleJob);public List<ScheduleJob> getAllScheduleJob();public void modifyTrigger(ScheduleJob scheduleJob);public void restartJob(String[] name,String[] group);public void startNowJob(String[] name,String[] group);public void delJob(String[] name,String[] group);public void stopJob(String[] name,String[] group);}
五 实现类
import java.util.ArrayList;import java.util.List;import java.util.Set;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobKey;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.matchers.GroupMatcher;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.wangsong.system.model.ScheduleJob;import com.wangsong.system.service.ScheduleJobService;@Servicepublic class ScheduleJobServiceImpl implements ScheduleJobService{@Autowiredprivate Scheduler scheduler;/** * 添加定时任务 * @param ScheduleJob */public void add(ScheduleJob scheduleJob){@SuppressWarnings("rawtypes")Class job = null;try {job = Class.forName(scheduleJob.getClassName());} catch (ClassNotFoundException e1) {e1.printStackTrace();}@SuppressWarnings("unchecked")JobDetail jobDetail = JobBuilder.newJob(job).withIdentity(scheduleJob.getName(), scheduleJob.getGroup()).build(); //表达式调度构建器(可判断创建SimpleScheduleBuilder)CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());jobDetail.getJobDataMap().put("scheduleJob", scheduleJob);//按新的cronExpression表达式构建一个新的triggerCronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getName(), scheduleJob.getGroup()).withSchedule(scheduleBuilder).build();try {scheduler.scheduleJob(jobDetail, trigger);} catch (SchedulerException e) {e.printStackTrace();}}/** * 获取所有计划中的任务 * @return 结果集合 */public List<ScheduleJob> getAllScheduleJob(){List<ScheduleJob> scheduleJobList=new ArrayList<ScheduleJob>();GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();try {Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);for (JobKey jobKey : jobKeys) { List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey); for (Trigger trigger : triggers) { ScheduleJob scheduleJob = new ScheduleJob(); scheduleJob.setName(jobKey.getName()); scheduleJob.setGroup(jobKey.getGroup()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); scheduleJob.setStatus(triggerState.name()); //获取要执行的定时任务类名 JobDetail jobDetail=scheduler.getJobDetail(jobKey); scheduleJob.setClassName(jobDetail.getJobClass().getName()); if (trigger instanceof CronTrigger) {CronTrigger cron = (CronTrigger) trigger;scheduleJob.setCronExpression(cron.getCronExpression());} scheduleJobList.add(scheduleJob); }}} catch (Exception e) {e.printStackTrace();}return scheduleJobList;}/** * 恢复任务 * @param name 任务名 * @param group 任务组 */public void restartJob(String[] name,String[] group){for(int i=0;i<name.length;i++){JobKey key = new JobKey(name[i], group[i]);try {scheduler.resumeJob(key);} catch (SchedulerException e) {e.printStackTrace();}}}/** * 立马执行一次任务 * @param name 任务名 * @param group 任务组 */public void startNowJob(String[] name,String[] group){for(int i=0;i<name.length;i++){JobKey jobKey = JobKey.jobKey(name[i], group[i]);try {scheduler.triggerJob(jobKey);} catch (SchedulerException e) {e.printStackTrace();}}}/** * 删除任务 * @param name 任务名 * @param group 任务组 */public void delJob(String[] name,String[] group){for(int i=0;i<name.length;i++){JobKey key = new JobKey(name[i], group[i]);try {scheduler.deleteJob(key);} catch (SchedulerException e) {e.printStackTrace();}}}/** * 修改触发器时间 * @param name 任务名 * @param group 任务组 * @param cron cron表达式 */public void modifyTrigger(ScheduleJob scheduleJob){try { TriggerKey key = TriggerKey.triggerKey(scheduleJob.getName(), scheduleJob.getGroup()); //Trigger trigger = scheduler.getTrigger(key); CronTrigger newTrigger = (CronTrigger) TriggerBuilder.newTrigger() .withIdentity(key) .withSchedule(CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())) .build(); scheduler.rescheduleJob(key, newTrigger); } catch (SchedulerException e) { e.printStackTrace(); } }/** * 暂停任务 * @param name 任务名 * @param group 任务组 */public void stopJob(String[] name,String[] group){for(int i=0;i<name.length;i++){JobKey key = new JobKey(name[i], group[i]);try {scheduler.pauseJob(key);} catch (SchedulerException e) {e.printStackTrace();}}}}
六 entity
import java.io.Serializable;public class ScheduleJob implements Serializable {private static final long serialVersionUID = 7443454565979676171L;private String name;//任务名private String group;//任务组private String cronExpression;//cron表达式private String status;//状态private String className;//要执行的任务类路径名public ScheduleJob() {super();}public ScheduleJob(String name, String group, String cronExpression,String status, String description,String className) {super();this.name = name;this.group = group;this.cronExpression = cronExpression;this.status = status;this.className=className;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGroup() {return group;}public void setGroup(String group) {this.group = group;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getCronExpression() {return cronExpression;}public void setCronExpression(String cronExpression) {this.cronExpression = cronExpression;}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}}
六 业务处理类
import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.DisallowConcurrentExecution;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import com.wangsong.system.model.ScheduleJob;@DisallowConcurrentExecution public class TaskA implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { ScheduleJob scheduleJob = (ScheduleJob)context.getMergedJobDataMap().get("scheduleJob"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); System.out.println("任务名称 = [" + scheduleJob.getName() + "]"+ " 在 " + dateFormat.format(new Date())+" 时运行"); }}
累了 累了......
阅读全文
0 0
- quartz之简单应用二
- quartz之简单应用一
- quartz 的简单应用
- iText简单应用之二
- CreateRemoteThread简单应用之二
- quartz之应用
- Quartz 新手自学(简单应用)
- listview简单应用之BaseAdapter(二)
- Quartz学习之二-CronTrigger
- Quartz学习——Quartz简单入门Demo(二)
- Quartz学习——Quartz简单入门Demo(二)
- Quartz.NET学习系列(二)--- 简单触发器
- quartz入门(二)SimpleTrigger简单实例
- Quartz(二)简单的使用
- spring集成quartz持久化简单应用
- java定时框架Quartz的简单应用
- Spring+Quartz 定时器的简单应用
- spring之spring与Quartz整合(二)
- mt6735 【Audio Profile】如何分别配置视频铃声的卡1卡2默认铃声
- Git Commit message 的格式
- oracle创建用户及表空间
- mysql 删除重复的记录、A表字段更新到B表
- springboot英文帮助文档链接
- quartz之简单应用二
- SSH免密码登陆配置
- Vocabulary Gym
- js在safari浏览器下声明变量时会根据变量名和页面Dom元素id自动初始化为Dom类型
- Springboot中使用缓存
- require.main
- 欢迎使用CSDN-markdown编辑器
- ssh整合问题总结--使用HibernateTemplate实现数据分页展示
- Django中的数据记录的增、删、改、查