目录

添加依赖配置

创建定时任务实体类

任务实体持久化

创建调度器工厂

TaskUtils工具类

创建定时任务服务类

创建定时任务初始化服务类

创建定时任务实现类


在实际项目开发过程中,定时任务几乎是必不可少的。作为Java程序员用的最多的任务调度框架非Quartz莫属了。 

在Quartz中配置任务的方式很多,比较常见的就有基于注解配置、基于XML等配置文件进行配置和通过数据库进行配置三种配置方式,具体应该使用哪种方式来对定时任务进行配置需要根据你的实际业务场景来进行选择,这不是本文要讨论的重点,本文仅对如何使用数据库实现对定时任务的动态灵活配置进行简单示例和介绍。

为简单起见,本文使用了Spring Jpa来进行数据库操作。当应用启动时,TaskInitService类会从数据库中读取定时任务并进行加载。由于所有的定时任务都被存储在数据库中,用户可以通过相应的前端任务展示页面方便地对定时任务进行查看和管理,一旦有任务被修改,Scheduler调度器中的任务也会同步更新并立刻生效。项目的完整目录层次如下图所示。

添加依赖配置

为了使用Quartz和JPA,需要在工程POM文件中引入它们的Maven依赖,此外本示例工程中还使用到了lombok和commons-lang两个辅助工具包。 

	<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.1.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 添加MYSQL数据库驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 添加spring jpa依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 添加quartz依赖 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version></dependency><!-- 添加lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 添加commons-lang3依赖 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency></dependencies>

在application.properties配置文件中除了要定义MYSQL数据库连接信息外,还需要添加如下JPA相关配置。 

########################################################
### Java Persistence Api --  Spring jpa setting  #######
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

创建定时任务实体类

定义两个任务实体类:TaskCronJob和TaskSimJob,用来与数据库中的表建立映射关系。  

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;import lombok.Data;/*** 基于Cron触发器的定时任务实体类* * @author pengjunlee**/
@Data
@Entity
@Table(name="task_cron_job")
public class TaskCronJob {// Job主键@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;// cron表达式private String cron;// Job名称private String jobName;// Job相关的类全名private String jobClassName;// Job描述private String jobDescription;// Job编号private String jobNumber;// Job是否启用private Boolean enabled;public TaskCronJob(String cron, String jobName, String jobClassName, String jobDescription, String jobNumber) {super();this.cron = cron;this.jobName = jobName;this.jobClassName = jobClassName;this.jobDescription = jobDescription;this.jobNumber = jobNumber;}public TaskCronJob() {}
}
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;import lombok.Data;/*** 基于simple触发器的定时任务实体类* * @author pengjunlee**/
@Data
@Entity
@Table(name="task_sim_job")
public class TaskSimJob {// Job主键@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;// 间隔时间private Integer intervalTime;// Job名称private String jobName;// Job相关的类全名private String jobClassName;// Job描述private String jobDescription;// Job编号private String jobNumber;// Job是否启用private Boolean enabled;public TaskSimJob(Integer intervalTime, String jobName, String jobClassName, String jobDescription,String jobNumber) {super();this.intervalTime = intervalTime;this.jobName = jobName;this.jobClassName = jobClassName;this.jobDescription = jobDescription;this.jobNumber = jobNumber;}public TaskSimJob() {}}

对应的数据库字段及其格式如下图所示。 

任务实体持久化

通过上面定义的定义的两个任务实体类TaskCronJob和TaskSimJob,实现了使用Java的普通对象(POJO)与数据库表建立映射关系(ORM),接下来使用JPA来实现持久化。定义好的TaskCronJobRepository和TaskSimJobRepository均继承自CrudRepository,用来实现基本的持久化操作。 

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;import com.pengjunlee.task.bean.TaskCronJob;@Repository
public interface TaskCronJobRepository extends CrudRepository<TaskCronJob, Long>
{}
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;import com.pengjunlee.task.bean.TaskSimJob;@Repository
public interface TaskSimJobRepository extends CrudRepository<TaskSimJob, Long>
{}

创建调度器工厂

TaskSchedulerFactory调度器工厂类用来生产Scheduler调度器对象,一般情况下应将其实现为单例。  

import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;/*** 调度器工厂类,应当在Spring中将该类配置为单例*/
@Component
@Slf4j
public class TaskSchedulerFactory {private volatile Scheduler scheduler;/*** 获得scheduler实例*/public Scheduler getScheduler() {Scheduler s = scheduler;if (s == null) {synchronized (this) {s = scheduler;if (s == null) {// 双重检查try {SchedulerFactory sf = new StdSchedulerFactory();s = scheduler = sf.getScheduler();} catch (Exception e) {log.error("Get scheduler error :" + e.getMessage(), e);}}}}return s;}
}

TaskUtils工具类

TaskUtils工具类负责为定时任务生产JobKey和TriggerKey。 

import org.quartz.JobKey;
import org.quartz.TriggerKey;import com.pengjunlee.task.bean.TaskCronJob;
import com.pengjunlee.task.bean.TaskSimJob;/*** 任务管理模块的工具类*/
public class TaskUtils
{/*** 基于cron调度的Job的默认组名*/public static final String CRON_JOB_GROUP_NAME = "cron_task_group";/*** 基于simple调度的Job的默认组名*/public static final String SIM_JOB_GROUP_NAME = "sim_task_group";/*** 产生JobKey* * @param job* @return*/public static JobKey genCronJobKey(TaskCronJob job){return new JobKey(job.getJobName().trim(), CRON_JOB_GROUP_NAME);}/*** 产生TriggerKey* * @param job* @return*/public static TriggerKey genCronTriggerKey(TaskCronJob job){return new TriggerKey("trigger_" + job.getJobName().trim(), CRON_JOB_GROUP_NAME);}/*** 产生JobKey* * @param job* @return*/public static JobKey genSimJobKey(TaskSimJob job){return new JobKey(job.getJobName().trim(), SIM_JOB_GROUP_NAME);}/*** 产生TriggerKey* * @param job* @return*/public static TriggerKey genSimTriggerKey(TaskSimJob job){return new TriggerKey("trigger_" + job.getJobName().trim(), SIM_JOB_GROUP_NAME);}/*** 判断是否两个trigger key是否相等* * @param tk1* @param tk2* @return*/public static boolean isTriggerKeyEqual(TriggerKey tk1, TriggerKey tk2){return tk1.getName().equals(tk2.getName()) && ((tk1.getGroup() == null && tk2.getGroup() == null)|| (tk1.getGroup() != null && tk1.getGroup().equals(tk2.getGroup())));}
}

创建定时任务服务类

TaskCronJobService和TaskSimJobService通过调用上面定义好的TaskCronJobRepository和TaskSimJobRepository两个持久化类,在保存定时任务到数据库时实现了对调度器中定时任务的同步更新。 

import javax.annotation.Resource;
import javax.transaction.Transactional;import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Service;import com.pengjunlee.task.TaskSchedulerFactory;
import com.pengjunlee.task.bean.TaskCronJob;
import com.pengjunlee.task.repository.TaskCronJobRepository;
import com.pengjunlee.task.util.TaskUtils;import lombok.extern.slf4j.Slf4j;/*** 基于Cron的定时任务服务类* * @author pengjunlee*/
@Service
@Slf4j
public class TaskCronJobService
{@Resourceprivate TaskCronJobRepository cronJobRepository;@Resourceprivate TaskSchedulerFactory schedulerFactory;// 在对任务进行保存时需同步更新调度器中的定时任务配置@Transactionalpublic void save(TaskCronJob taskCronJob){try{TaskCronJob job = findOne(taskCronJob.getId());TriggerKey triggerKey = TaskUtils.genCronTriggerKey(job);Scheduler scheduler = schedulerFactory.getScheduler();JobKey jobKey = TaskUtils.genCronJobKey(job);// 如果不同则代表着CRON表达式已经修改if (!job.getCron().equals(taskCronJob.getCron())){CronTrigger newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(CronScheduleBuilder.cronSchedule(taskCronJob.getCron()).withMisfireHandlingInstructionDoNothing()).build();// 更新任务scheduler.rescheduleJob(triggerKey, newTrigger);}if (!job.getEnabled().equals(taskCronJob.getEnabled())){// 如果状态为0则停止该任务if (!taskCronJob.getEnabled()){/* scheduler.unscheduleJob(triggerKey); */scheduler.pauseJob(jobKey);/* scheduler.deleteJob(jobKey); */}else{Trigger trigger = scheduler.getTrigger(triggerKey);// trigger如果为null则说明scheduler中并没有创建该任务if (trigger == null){Class<?> jobClass = Class.forName(job.getJobClassName().trim());@SuppressWarnings("unchecked")JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) jobClass).withIdentity(jobKey).withDescription(job.getJobDescription()).build();trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(CronScheduleBuilder.cronSchedule(taskCronJob.getCron()).withMisfireHandlingInstructionDoNothing()).build();scheduler.scheduleJob(jobDetail, trigger);}else{// 不为null则说明scheduler中有创建该任务,更新即可CronTrigger newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(CronScheduleBuilder.cronSchedule(taskCronJob.getCron()).withMisfireHandlingInstructionDoNothing()).build();scheduler.rescheduleJob(triggerKey, newTrigger);}}}job.setCron(taskCronJob.getCron());job.setEnabled(taskCronJob.getEnabled());cronJobRepository.save(job);}catch (Exception e){log.error("定时任务刷新失败...");log.error(e.getMessage());}}public TaskCronJob findOne(Long id){return cronJobRepository.findOne(id);}public Iterable<TaskCronJob> findAll(){return cronJobRepository.findAll();}}
import javax.annotation.Resource;
import javax.transaction.Transactional;import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Service;import com.pengjunlee.task.TaskSchedulerFactory;
import com.pengjunlee.task.bean.TaskSimJob;
import com.pengjunlee.task.repository.TaskSimJobRepository;
import com.pengjunlee.task.util.TaskUtils;import lombok.extern.slf4j.Slf4j;/*** 基于Cron的定时任务服务类* * @author pengjunlee*/
@Service
@Slf4j
public class TaskSimJobService
{@Resourceprivate TaskSimJobRepository simJobRepository;@Resourceprivate TaskSchedulerFactory schedulerFactory;// 在对任务进行保存时需同步更新调度器中的定时任务配置@Transactionalpublic void save(TaskSimJob taskSimJob){try{TaskSimJob job = findOne(taskSimJob.getId());TriggerKey triggerKey = TaskUtils.genSimTriggerKey(job);Scheduler scheduler = schedulerFactory.getScheduler();JobKey jobKey = TaskUtils.genSimJobKey(job);// 如果不同则代表着CRON表达式已经修改if (!job.getIntervalTime().equals(taskSimJob.getIntervalTime())){SimpleTrigger newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(taskSimJob.getIntervalTime()).withMisfireHandlingInstructionIgnoreMisfires().repeatForever()).build();// 更新任务scheduler.rescheduleJob(triggerKey, newTrigger);}if (!job.getEnabled().equals(taskSimJob.getEnabled())){// 如果状态为0则停止该任务if (!taskSimJob.getEnabled()){/* scheduler.unscheduleJob(triggerKey); */scheduler.pauseJob(jobKey);/* scheduler.deleteJob(jobKey); */}else{Trigger trigger = scheduler.getTrigger(triggerKey);// trigger如果为null则说明scheduler中并没有创建该任务if (trigger == null){Class<?> jobClass = Class.forName(job.getJobClassName().trim());@SuppressWarnings("unchecked")JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) jobClass).withIdentity(jobKey).withDescription(job.getJobDescription()).build();trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(taskSimJob.getIntervalTime()).withMisfireHandlingInstructionIgnoreMisfires().repeatForever()).build();scheduler.scheduleJob(jobDetail, trigger);}else{// 不为null则说明scheduler中有创建该任务,更新即可SimpleTrigger newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(taskSimJob.getIntervalTime()).withMisfireHandlingInstructionIgnoreMisfires().repeatForever()).build();scheduler.rescheduleJob(triggerKey, newTrigger);}}}job.setIntervalTime(taskSimJob.getIntervalTime());job.setEnabled(taskSimJob.getEnabled());simJobRepository.save(job);}catch (Exception e){log.error("定时任务刷新失败...");log.error(e.getMessage());}}public TaskSimJob findOne(Long id){return simJobRepository.findOne(id);}public Iterable<TaskSimJob> findAll(){return simJobRepository.findAll();}
}

创建定时任务初始化服务类

TaskInitService类负责从数据库中获取到需要执行的定时任务并将任务添加到调度器的管理之中。 

import static org.quartz.CronExpression.isValidExpression;import java.util.List;import javax.annotation.PostConstruct;
import javax.annotation.Resource;import org.apache.commons.lang3.StringUtils;
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.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.stereotype.Component;import com.pengjunlee.task.TaskSchedulerFactory;
import com.pengjunlee.task.bean.TaskCronJob;
import com.pengjunlee.task.bean.TaskSimJob;
import com.pengjunlee.task.service.TaskInitService;
import com.pengjunlee.task.util.TaskUtils;import lombok.extern.slf4j.Slf4j;/*** 定时任务初始化服务类* @author pengjunlee**/
@Component
@Slf4j
public class TaskInitService {@Resourceprivate TaskCronJobService taskCronJobService;@Resourceprivate TaskSimJobService taskSimJobService;@Resourceprivate TaskSchedulerFactory schedulerFactory;/*** 初始化*/@PostConstructpublic void init() {Scheduler scheduler = schedulerFactory.getScheduler();if (scheduler == null) {log.error("初始化定时任务组件失败,Scheduler is null...");return;}// 初始化基于cron时间配置的任务列表try {initCronJobs(scheduler);} catch (Exception e) {log.error("init cron tasks error," + e.getMessage(), e);}// 初始化基于固定间隔时间配置的任务列表try {initSimJobs(scheduler);} catch (Exception e) {log.error("init sim tasks error," + e.getMessage(), e);}try {log.info("The scheduler is starting...");scheduler.start(); // start the scheduler} catch (Exception e) {log.error("The scheduler start is error," + e.getMessage(), e);}}/*** 初始化任务(基于cron触发器)* */private void initCronJobs(Scheduler scheduler) throws Exception {Iterable<TaskCronJob> jobList = taskCronJobService.findAll();if (jobList != null) {for (TaskCronJob job : jobList) {scheduleCronJob(job, scheduler);}}}/*** 初始化任务(基于simple触发器)* */private void initSimJobs(Scheduler scheduler) throws Exception {Iterable<TaskSimJob> jobList = taskSimJobService.findAll();if (jobList != null) {for (TaskSimJob job : jobList) {scheduleSimJob(job, scheduler);}}}/*** 安排任务(基于simple触发器)* * @param job* @param scheduler*/private void scheduleSimJob(TaskSimJob job, Scheduler scheduler) {if (job != null && StringUtils.isNotBlank(job.getJobName()) && StringUtils.isNotBlank(job.getJobClassName())&& scheduler != null) {if (!job.getEnabled()) {return;}try {JobKey jobKey = TaskUtils.genSimJobKey(job);if (!scheduler.checkExists(jobKey)) {// This job doesn't exist, then add it to scheduler.log.info("Add new simple job to scheduler, jobName = " + job.getJobName());this.newJobAndNewSimTrigger(job, scheduler, jobKey);} else {log.info("Update simple job to scheduler, jobName = " + job.getJobName());this.updateSimTriggerOfJob(job, scheduler, jobKey);}} catch (Exception e) {log.error("ScheduleCronJob is error," + e.getMessage(), e);}} else {log.error("Method scheduleSimJob arguments are invalid.");}}/*** 安排任务(基于cron触发器)* * @param job* @param scheduler*/private void scheduleCronJob(TaskCronJob job, Scheduler scheduler) {if (job != null && StringUtils.isNotBlank(job.getJobName()) && StringUtils.isNotBlank(job.getJobClassName())&& StringUtils.isNotBlank(job.getCron()) && scheduler != null) {if (!job.getEnabled()) {return;}try {JobKey jobKey = TaskUtils.genCronJobKey(job);if (!scheduler.checkExists(jobKey)) {// This job doesn't exist, then add it to scheduler.log.info("Add new cron job to scheduler, jobName = " + job.getJobName());this.newJobAndNewCronTrigger(job, scheduler, jobKey);} else {log.info("Update cron job to scheduler, jobName = " + job.getJobName());this.updateCronTriggerOfJob(job, scheduler, jobKey);}} catch (Exception e) {log.error("ScheduleCronJob is error," + e.getMessage(), e);}} else {log.error("Method scheduleCronJob arguments are invalid.");}}/*** 新建job和trigger到scheduler(基于simple触发器)* * @param job* @param scheduler* @param jobKey* @throws SchedulerException* @throws ClassNotFoundException*/@SuppressWarnings({ "rawtypes", "unchecked" })private void newJobAndNewSimTrigger(TaskSimJob job, Scheduler scheduler, JobKey jobKey)throws SchedulerException, ClassNotFoundException {TriggerKey triggerKey = TaskUtils.genSimTriggerKey(job);// get a Class object by string class name of job;Class jobClass = Class.forName(job.getJobClassName().trim());JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobKey).withDescription(job.getJobDescription()).build();SimpleTrigger trigger = null;int intervalInSec = job.getIntervalTime();if (intervalInSec > 0) {// repeat the job every interval seconds.trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(intervalInSec)).build();} else {// totally execute the job once.trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(1)).build();}scheduler.scheduleJob(jobDetail, trigger);}/*** 更新job的trigger(基于simple触发器)* * @param job* @param scheduler* @param jobKey* @throws SchedulerException*/private void updateSimTriggerOfJob(TaskSimJob job, Scheduler scheduler, JobKey jobKey) throws SchedulerException {TriggerKey triggerKey = TaskUtils.genSimTriggerKey(job);int intervalInSec = job.getIntervalTime();List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);for (int i = 0; triggers != null && i < triggers.size(); i++) {Trigger trigger = triggers.get(i);TriggerKey curTriggerKey = trigger.getKey();if (TaskUtils.isTriggerKeyEqual(triggerKey, curTriggerKey)) {SimpleTrigger newTrigger = null;if (intervalInSec > 0) {// repeat the job every interval seconds.newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(intervalInSec)).build();} else {// totally execute the job once.newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(1)).build();}scheduler.rescheduleJob(curTriggerKey, newTrigger);} else {// different trigger key // The trigger key is illegal,// unschedule this triggerscheduler.unscheduleJob(curTriggerKey);}}}/*** 新建job和trigger到scheduler(基于cron触发器)* * @param job* @param scheduler* @param jobKey* @throws SchedulerException* @throws ClassNotFoundException*/@SuppressWarnings({ "rawtypes", "unchecked" })private void newJobAndNewCronTrigger(TaskCronJob job, Scheduler scheduler, JobKey jobKey)throws SchedulerException, ClassNotFoundException {TriggerKey triggerKey = TaskUtils.genCronTriggerKey(job);String cronExpr = job.getCron();if (!isValidExpression(cronExpr)) {return;}// get a Class object by string class name of job;Class jobClass = Class.forName(job.getJobClassName().trim());JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobKey).withDescription(job.getJobDescription()).build();CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(CronScheduleBuilder.cronSchedule(cronExpr).withMisfireHandlingInstructionDoNothing()).build();scheduler.scheduleJob(jobDetail, trigger);}/*** 更新job的trigger(基于cron触发器)* * @param job* @param scheduler* @param jobKey* @throws SchedulerException*/private void updateCronTriggerOfJob(TaskCronJob job, Scheduler scheduler, JobKey jobKey) throws SchedulerException {TriggerKey triggerKey = TaskUtils.genCronTriggerKey(job);String cronExpr = job.getCron().trim();List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);for (int i = 0; triggers != null && i < triggers.size(); i++) {Trigger trigger = triggers.get(i);TriggerKey curTriggerKey = trigger.getKey();if (TaskUtils.isTriggerKeyEqual(triggerKey, curTriggerKey)) {if (trigger instanceof CronTrigger&& cronExpr.equalsIgnoreCase(((CronTrigger) trigger).getCronExpression())) {// Don't need to do anything.} else {if (isValidExpression(job.getCron())) {// Cron expression is valid, build a new trigger and// replace the old one.CronTrigger newTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).forJob(jobKey).withSchedule(CronScheduleBuilder.cronSchedule(cronExpr).withMisfireHandlingInstructionDoNothing()).build();scheduler.rescheduleJob(curTriggerKey, newTrigger);}}} else {// different trigger key ,The trigger key is illegal, unschedule// this triggerscheduler.unscheduleJob(curTriggerKey);}}}}

创建定时任务实现类

具体的定时任务实现类需要实现Job接口。 

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("执行定时任务:MyJob.execute()...");}}

本文项目源码已上传至CSDN,资源地址:http://download.csdn.net/download/pengjunlee/10142680  

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. PNP三极管工作原理

    模电课本上主要以npn型管介绍的放大电路,这里将pnp型管的原理简单介绍一下1.PNP管放大原理: 当PNP管的VC<VB<VE时,使得集电结反偏,发射结正偏时,管子的发射极电流流入管子,基极电流和集电极电流流出管子,且集电极电流跟基极电流之间成β关系,三极电流满足IE=IB+I…...

    2024/4/21 0:46:54
  2. crontab 在mac上不执行问题研究

    crontab是个管理定时任务的工具,作用是在特定时间(通过crontab的语法配置),自动执行特定任务(想让它执行什么,就写个脚本或bash命令)。当你每天都需要执行脚本干一些重复工作的时候,这个东西就派上用场了。 不了解这个东西怎么用的朋友,可以通过点击这里进行一个基本了…...

    2024/4/21 0:46:53
  3. SpringQuartz定时任务的cron表达式书写

    分享一个人工智能教程,零基础入门!http://www.captainbed.net/innerSpringQuartz定时任务的使用,要配置这个定时任务什么时候执行,周期是多少,周期内执行多少次,这个都是cron表达式来控制的,下面详解一下这个cron表达式。一、先来举些例子【1】0 0 10,14,16 * * ? 每…...

    2024/4/21 0:46:52
  4. 【DSP入门】一文带你跨过TI TMS320F2803x 首个学习门槛

    摘要对于德州仪器(TI)这家公司,相信大家再熟悉不过了,它是全球知名的半导体公司,为现实世界的信号处理提供数字信号处理(DSP)及模拟器件技术。除半导体业务外,还提供包括传感与控制、教育产品和数字光源处理解决方案。尤其是在数字开关电源和电机控制方面,C2000™系列的MC…...

    2024/4/21 0:46:51
  5. tp5.1 php计划任务crontab

    tp5.1中的php 计划任务的实现,本质上可以分为两种第一种封装在框架内部,在crontab -e中只要添加一条,然后在框架内去扩展内容就好了(Laravel的schedule,任务调度),这种自由度比较高,也比较方便。第二种:创建好PHP的执行脚本,在crontab中执行脚本,或者再写一个.sh 在…...

    2024/4/20 16:58:23
  6. 通俗易懂的讲解二极管三极管工作原理

    本文转自:https://www.zhihu.com/question/25032358https://blog.csdn.net/a10615/article/details/51627619先讲解二极管工作原理:白话文讲解这个确实不是一两句话说得清的,但是我还是想挑战一下自己的文字功底。尽量不用太理论化的陈述。话说世界上有种神奇的物质叫“半导…...

    2024/4/21 0:46:49
  7. 从一个疯狂下载者变成学习者

    from: 弯曲评论(编者按——这篇文字最早见于数年前的某英语论坛,原始出处已不可考。尽管内容偏重英语学习,但文中指出的很多学习者存在的问题,以及对学习方法的体悟,却是具有普适性并值得借鉴的。古人云:“临渊羡鱼,不如退而结网”,这样的现象屡见不鲜:满满的硬盘,没…...

    2024/4/20 20:57:04
  8. 精进Quartz—Spring和Quartz集成详解(三)

    欢迎关注我的公众号: Java编程技术乐园。分享技术,一起精进Quartz! 做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开!文章目录一、Jar包依赖二、任务类Job三、配置文件 spring_quartz.xml和运行结果3.1、RAM存储方式的xml配置文件3.1.1、配置文件3.…...

    2024/5/1 22:15:43
  9. crontab定时启动脚本,自动化配置

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调…...

    2024/4/20 20:57:02
  10. 带你了解TI的DSP入门芯片TMS320F28335

    作为一个电子硬件工程师,怎么不能懂DSP,或者我们中有一些同学对DSP的理解还不是很多,今天就让我们给大家介绍一个DSP的入门芯片,来自TI的TMS320F28335。相信看过了这一系列的内容,大家会对DSP有初步的了解。TMS320F28335简介:TMS320F28335采用176引脚LQFP四边形封装,其功…...

    2024/5/1 0:51:01
  11. 互动快报:从读报刊看性格

    互动快报:从读报刊看性格 互动快报读报—读出你的性格 互动快报读报—真的可以读出你的性格 网上免费读报软件—互动快报 下载地址: http://www.i925.net/download/versionLast.html在美国纽约,有一个名叫“希尔塞心理咨询中心”的研究机构。它的主任霍夫曼博士是一位著名的…...

    2024/4/30 19:59:58
  12. Quartz的使用

    什么是Quartz Quartz是一个由java编写的开源作业调度框架,简单来说,Quartz就是启动定时任务的框架,像linux系统中的corntab,可以定时启动任务. Quartz的单独使用 Quartz的使用必须掌握下面三个对象Scheduler 定时器对象 JobDetail 任务对象 Trigger 触发器对象 SimpleTrigg…...

    2024/4/30 18:39:05
  13. 三极管工作原理(转载)

    参考文章 : 1、三极管工作原理详解 2、图说三极管的三个工作状态 3、图解三极管基本知识及电子电路图半导体三极管,又称为双极结型晶体管(bipolar junction transistor, BJT)。 广义上,三极管有多种,常见如下图所示 。 狭义上,三极管指双极型三极管,是最基础最通用的三极…...

    2024/4/30 16:09:35
  14. crontab 重定向错误日志 加上时间

    (原文链接 http://ivhong.com/crontab-%E9%87%8D%E5%AE%9A%E5%90%91%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97-%E5%8A%A0%E4%B8%8A%E6%97%B6%E9%97%B4/) 在开发中,我们避免不了写crontab脚本来异步执行一些东西,一般设置crontab用下面的方法 */1 * * * * commond > /tmp/t.l…...

    2024/5/1 4:33:21
  15. 如何下载英文原版书

    近来下载了很多英文书籍,分享一下自己的下载心得,希望对书友有好处。以前常常抱怨由于老外版权意识强,读英语原版书籍难。后来有机会认识了rapidshare,很多新书都能够找到下载,才恍然大悟:并不是找不到书籍阅读,而是没有找到方法。当然并非所有图书都可以在网上免费下载…...

    2024/4/30 20:15:09
  16. Quartz框架介绍

    问题产生背景:最近在做项目,有个需求:就是需要定时去执行某一项任务。谈到定时,我第一个想到就是QuartzJob 这个任务调度系统,借此博客,给大家分享一下使用过程中的一些技巧。Quartz介绍:什么是Quartz:引用官网的一段话Quartz is a richly featured, open source job s…...

    2024/4/30 21:30:53
  17. crontab 定时任务避免重复执行

    使用crontab设置一个脚本每个一段时间自动执行一次,当脚本的执行时间超过crontab设置的时间间隔,那个脚本就会在同一时刻同时执行。比如设置crontab每隔五分钟执行一次task.sh:*/5 * * * * /bin/bash /pathto/task.sh如果task.sh执行超过了5分钟,那么五分钟之后就会有两个t…...

    2024/4/30 22:36:30
  18. 晶体三极管工作原理

    晶体三极管作为一个常用器件,是构成现代电子世界的重要基石。然而,传统的教科书对其工作原理的讲述却存在有很大问题,使初学者对三极管的工作原理无法正常理解,感到别扭与迷茫。晶体三极管原理问题的关键在于:集电结为什么会反向导通?这与晶体二极管原理中强调的PN结单向…...

    2024/5/1 5:00:49
  19. DSP入门教程之官方例程

    controlSUITE是TI为C2000开发者提供的资料库和参考工具包。在这里面对C2000每个型号都有对应的样例、手册和设计指导。还有各种开发板平台的原理图、PCB图和使用说明。可以说,无论学习还是设计开发,contgrolSUITE是一个重要的参考工具包。获取方法 步骤1) 扫描下方二维码,进…...

    2024/4/30 16:22:38
  20. 《自我关怀的力量》PDF完整文字版电子书免费下载

    内容简介:我们都更容易关怀他人、包容他人、理解他人,却忽略了自己!自我关怀是当今社会高压下人们共同缺少的一种心理能力。因为自尊、自我批评的主流地位,人们在善待别人的同时,却不能同样善待自己。作者为我们打开了另一扇心灵之窗,让我们承认自己的苦难与不完美,并且关…...

    2024/4/30 21:53:47

最新文章

  1. 数据结构实验--实验02 栈的应用(数制转换及回文判断)

    一、实验内容 二、算法实现 1、用栈的特性实现进转换的思路&#xff1a;参考手算求进制转换的思路——除r取余法&#xff0c;这里的r表示基数&#xff0c;8进制的基数就是8&#xff0c;那么将十进制数转换成8进制数手算的方法就是除8取余法&#xff0c;具体手算方法如图&#…...

    2024/5/2 1:37:36
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. axios拦截器:每次请求自动带上 token

    Step 1&#xff1a;创建Axios实例并添加拦截器 在你的Vue项目中&#xff0c;一般我们会先导入axios&#xff0c;然后创建一个axios实例。这样做是为了方便统一管理和配置。 import axios from axios; // 引入axios// 创建一个axios实例 const service axios.create();// 添加请…...

    2024/4/30 17:13:59
  4. 微信小程序生命周期管理:从数据初始化到事件绑定

    作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…...

    2024/4/30 14:39:15
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57