精华内容
参与话题
问答
  • Spring+Quartz实现定时任务的配置方法

    万次阅读 多人点赞 2019-07-31 19:16:18
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="... xmlns:context="...
    <?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"
    	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
    	xsi:schemaLocation="
    		http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context
    		http://www.springframework.org/schema/context/spring-context.xsd
    		http://www.springframework.org/schema/tx 
    		http://www.springframework.org/schema/tx/spring-tx.xsd
    		http://www.springframework.org/schema/aop 
    		http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--  Scheduler配置 -->
    	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    		<property name="triggers">
    			<list>
    				<ref bean="teachingProcessTrigger" />
    			</list>
    		</property>
    		<property name="quartzProperties">
    			<props>
    				<prop key="org.quartz.threadPool.threadCount">3</prop>
    			</props>
    		</property>
    	</bean>
    <!--  Trigger配置 -->
    	<bean id="teachingProcessTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    		<property name="jobDetail">
    			<ref bean="teachingProcess" />
    		</property>
    		<property name="cronExpression">
    			<!--  每天凌晨0点执行一次 -->
    			<value>0 0 0 * * ?</value>
    		</property>
    	</bean>
    <!--  JobDetail配置 -->
    	<bean id="teachingProcess"
    		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    		<property name="targetObject">
        <!-- hrQuartzServiceImpl是一个业务类,在其他地方声明了bean,这里直接引用就可以 -->
    			<ref bean="hrQuartzServiceImpl" />
    		</property>
    		<property name="targetMethod">
        <!-- hrQuartzServiceImpl类里作为执行入口的方法名 -->
    			<value>doTeachingProcess</value>
    		</property>
    	</bean>
    </beans>
    

    任务有并行和串行之分,并行是指:一个定时任务,当执行时间到了的时候,立刻执行此任务,不管当前这个任务是否在执行中;串行是指:一个定时任务,当执行时间到了的时候,需要等待当前任务执行完毕,再去执行下一个任务。
    quartz框架中可以设置是否允许任务并行:
    如果是通过MethodInvokingJobDetailFactoryBean在运行中动态生成的Job,配置的xml文件有个concurrent属性,这个属性的功能是配置此job是否可以并行运行,如果为false则表示不可以并行运行,否则可以并行。如果一个job的业务处理发费的时间超过了job的启动的间隔时间(repeatInterval),这个属性非常有用。如果为false,那么,在这种情况下,当前job还在运行,那么下一个job只能延时运行。如果为true,那么job就会并行运行,配置示例如下:

    <bean id="jobCompareB2cAndLocal" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    	<property name="targetObject " ref="delegateJob " />
    	<property name="targetMethod " value="方法名" />
    	<property name="concurrent " value="false " />
    </bean >
    

    如果不配置,默认是true的,就是允许并行。

    展开全文
  • using System; using System.Collections.Concurrent; using System.Threading; using System.Threading.Tasks;... /// 任务队列 /// </summary> public class TaskQueue { #region 构造函数 ///
    using System;
    using System.Collections.Concurrent;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace Core.Util
    {
        /// <summary>
        /// 任务队列
        /// </summary>
        public class TaskQueue
        {
            #region 构造函数
    
            /// <summary>
            /// 默认队列
            /// 注:默认间隔时间1ms
            /// </summary>
            public TaskQueue()
            {
                _timeSpan = TimeSpan.Zero;
                Start();
            }
    
            /// <summary>
            /// 间隔任务队列
            /// 注:每个任务之间间隔一段时间
            /// </summary>
            /// <param name="timeSpan">间隔时间</param>
            public TaskQueue(TimeSpan timeSpan)
            {
                _timeSpan = timeSpan;
                Start();
            }
    
            #endregion
    
            #region 私有成员
            Semaphore _semaphore { get; } = new Semaphore(0, int.MaxValue); //Semaphore是一个线程同步的辅助类,允许访问的线程数
            private void Start()
            {
                Task.Factory.StartNew(() =>
                {
                    while (_isRun)
                    {
                        try
                        {
                            _semaphore.WaitOne();
                            bool success = _taskList.TryDequeue(out Action task);
                            if (success)
                            {
                                task?.Invoke();
                            }
    
                            if (_timeSpan != TimeSpan.Zero)
                                Thread.Sleep(_timeSpan);
                        }
                        catch (Exception ex)
                        {
                            HandleException?.Invoke(ex);
                        }
                    }
                }, TaskCreationOptions.LongRunning);
            }
            private bool _isRun { get; set; } = true;
            private TimeSpan _timeSpan { get; set; }
            private ConcurrentQueue<Action> _taskList { get; } = new ConcurrentQueue<Action>();
    
            #endregion
    
            #region 外部接口
    
            public void Stop()
            {
                _isRun = false;
            }
    
            public void Enqueue(Action task)
            {
                _taskList.Enqueue(task);
                _semaphore.Release();
            }
    
            public Action<Exception> HandleException { get; set; }
    
            #endregion
        }
    }
    
    展开全文
  • using Quartz; using Quartz.Impl; using System; using System.Collections.Concurrent; using System.Threading.Tasks;... /// 任务帮助类 /// </summary> public static class JobHelper { #region
    using Quartz;
    using Quartz.Impl;
    using System;
    using System.Collections.Concurrent;
    using System.Threading.Tasks;
    
    namespace Core.Util
    {
        /// <summary>
        /// 任务帮助类
        /// </summary>
        public static class JobHelper
        {
            #region 私有成员
    
            private static IScheduler __scheduler;
            private static object _lock = new object();
            private static IScheduler _scheduler
            {
                get
                {
                    if (__scheduler == null)
                    {
                        lock (_lock)
                        {
                            if (__scheduler == null)
                            {
                                __scheduler = AsyncHelper.RunSync(() => StdSchedulerFactory.GetDefaultScheduler());
                                AsyncHelper.RunSync(() => __scheduler.Start());
                            }
                        }
                    }
    
                    return __scheduler;
                }
            }
            static ConcurrentDictionary<string, Action> _jobs { get; }
                = new ConcurrentDictionary<string, Action>();
    
            #endregion
    
            #region 外部接口
    
            /// <summary>
            /// 设置一个时间间隔的循环操作
            /// </summary>
            /// <param name="action">执行的操作</param>
            /// <param name="timeSpan">时间间隔</param>
            /// <returns>任务标识Id</returns>
            public static string SetIntervalJob(Action action, TimeSpan timeSpan)
            {
                string key = Guid.NewGuid().ToString();
                _jobs[key] = action;
                IJobDetail job = JobBuilder.Create<Job>()
                   .WithIdentity(key)
                   .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity(key)
                    .StartNow()
                    .WithSimpleSchedule(x => x.WithInterval(timeSpan).RepeatForever())
                    .Build();
                AsyncHelper.RunSync(() => _scheduler.ScheduleJob(job, trigger));
    
                return key;
            }
    
            /// <summary>
            /// 设置每天定时任务
            /// </summary>
            /// <param name="action">执行的任务</param>
            /// <param name="h">时</param>
            /// <param name="m">分</param>
            /// <param name="s">秒</param>
            /// <returns>任务标识Id</returns>
            public static string SetDailyJob(Action action, int h, int m, int s)
            {
                string key = Guid.NewGuid().ToString();
                _jobs[key] = action;
                IJobDetail job = JobBuilder.Create<Job>()
                   .WithIdentity(key)
                   .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity(key)
                    .StartNow()
                    .WithCronSchedule($"{s} {m} {h} * * ?")//每天定时
                    .Build();
                AsyncHelper.RunSync(() => _scheduler.ScheduleJob(job, trigger));
    
                return key;
            }
    
            /// <summary>
            /// 设置延时任务,仅执行一次
            /// </summary>
            /// <param name="action">执行的操作</param>
            /// <param name="delay">延时时间</param>
            /// <returns>任务标识Id</returns>
            public static string SetDelayJob(Action action, TimeSpan delay)
            {
                string key = Guid.NewGuid().ToString();
                action += () =>
                {
                    RemoveJob(key);
                };
                _jobs[key] = action;
    
                IJobDetail job = JobBuilder.Create<Job>()
                   .WithIdentity(key)
                   .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity(key)
                    .StartAt(DateTime.Now + delay)
                    .WithSimpleSchedule(x => x.WithRepeatCount(0).WithInterval(TimeSpan.FromSeconds(10)))
                    .Build();
                AsyncHelper.RunSync(() => _scheduler.ScheduleJob(job, trigger));
    
                return key;
            }
    
            /// <summary>
            /// 通过表达式创建任务
            /// 表达式规则参考:http://www.jsons.cn/quartzcron/
            /// </summary>
            /// <param name="action">执行的操作</param>
            /// <param name="cronExpression">表达式</param>
            /// <returns></returns>
            public static string SetCronJob(Action action, string cronExpression)
            {
                string key = Guid.NewGuid().ToString();
                _jobs[key] = action;
                IJobDetail job = JobBuilder.Create<Job>()
                   .WithIdentity(key)
                   .Build();
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity(key)
                    .StartNow()
                    .WithCronSchedule(cronExpression)
                    .Build();
                AsyncHelper.RunSync(() => _scheduler.ScheduleJob(job, trigger));
    
                return key;
            }
    
            /// <summary>
            /// 删除任务
            /// </summary>
            /// <param name="jobId">任务标识Id</param>
            public static void RemoveJob(string jobId)
            {
                AsyncHelper.RunSync(() => _scheduler.DeleteJob(new JobKey(jobId)));
                _jobs.TryRemove(jobId, out _);
            }
    
            #endregion
    
            #region 内部类
    
            private class Job : IJob
            {
                public async Task Execute(IJobExecutionContext context)
                {
                    await Task.Run(() =>
                    {
                        string jobName = context.JobDetail.Key.Name;
                        if (_jobs.ContainsKey(jobName))
                        {
                            _jobs[jobName]?.Invoke();
                        }
                    });
                }
            }
    
            #endregion
        }
    }
    
    展开全文
  • 使用vs2019创建Worker Service程序 首先nuget安装 Microsoft.Extensions.Hosting.Windows 在Program中添加UseWindowsService() public class Program { public static void Main(string[] args) ...

    使用vs2019创建Worker Service程序
    首先nuget安装

    Microsoft.Extensions.Hosting.Windows

    在Program中添加UseWindowsService()

    public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                    }).UseWindowsService();//部署windows值守服务
        }
    

    实际任务执行代码Worker类

    public class Worker : BackgroundService
        {
            private readonly ILogger<Worker> _logger;
    
            public Worker(ILogger<Worker> logger)
            {
                _logger = logger;
            }
    
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    //实际要执行的任务代码
                    await Task.Delay(8640000, stoppingToken);
                }
            }
        }
    

    发布程序后在程序目录用cmd执行以下代码

    sc.exe create 服务名称 binpath= xxxx.exe
    
    展开全文
  • springboot 定时任务开发配置

    万次阅读 2019-07-19 15:24:58
    相关链接:https://blog.csdn.net/xubenxismile/article/details/96453704 一、添加依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>.../art...
  • SpringBoot-定时任务-集群篇

    万次阅读 2019-10-26 17:42:34
    前面一篇文章(SpringBoot-定时任务)中介绍了如何用SpringBoot框架中的注解方式来实现定时任务,这种方式的好处是不使用第三方的依赖,仅凭几个方便的注解,即可编写一个简单的定时任务处理。 实际开发中为了满足复杂...
  • linux crontab定时任务的使用

    万次阅读 多人点赞 2018-03-11 22:28:07
    另外,由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:crontab命令。 一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下...
  • 现在的web项目中很多场景下都有要执行定时任务的需求,比如说每隔5秒将redis中的统计当天注册用户数持久化到数据库。现在项目中实现这一功能,一般用quartz这一工具框架,但是这个对于一个新手来说比较麻烦,各种查...
  • 安装 pip3 install apscheduler -i ...import time from apscheduler.schedulers.background import BackgroundScheduler def tick(): print('任务一') def tick1(): print('任务二...
  • crontab定时任务不执行的原因

    万次阅读 多人点赞 2017-01-16 18:35:20
    我在网上找的时候发现网上主要...如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum...
  • SpringQuartz定时任务的cron表达式书写

    万次阅读 2018-09-17 15:09:28
    SpringQuartz定时任务的使用,要配置这个定时任务什么时候执行,周期是多少,周期内执行多少次,这个都是cron表达式来控制的,下面详解一下这个cron表达式。 一、先来举些例子 【1】0 0 10,14,16 * * ? 每天上午10...
  • 使用spring @Scheduled注解执行定时任务

    万次阅读 多人点赞 2012-07-14 09:31:34
    以前框架使用quartz框架执行定时调度问题、老大说这配置太麻烦、每个调度都需要多加在spring的配置中、能不能减少配置的量从而提高开发效率、最近看了看spring的 scheduled的使用注解的方式进行调度、感觉很方便、...
  • 收发文流程实现,以及流程引擎中动态增加节点|临时子流程的使用。流程引擎动态任务实现。
  • 一步步学习Linux多任务编程

    万次阅读 多人点赞 2015-06-04 10:56:55
    02、Linux系统调用之I/O操作(文件操作)03、文件描述符的复制:dup(), dup2()多进程实现多任务04、进程的介绍05、Linux可执行文件结构与进程结构06、多进程实现多任务(一):fork()07、多进程实现多任务(二):...
  • 怎么才能关闭**应用程序任务**,而**不是关闭进程**,关闭进程就直接关闭打开的全部任务了,我要是关闭**任务管理器**里面的"**单个任务**” ![图片说明]...
  • 基于Springboot执行多个定时任务并且动态获取定时任务信息 基于Springboot执行多个定时任务并且动态获取定时任务信息 简介 说明 SpringApplication-启动类 动态获取定时任务信息 mapper service service impl ...
  • Spring 整合 Quartz 实现动态定时任务(附demo)

    万次阅读 多人点赞 2016-05-01 18:57:24
    最近项目中需要用到定时任务的功能,虽然Spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大。在考虑之后,决定整合更为专业的Quartz来实现定时任务功能。普通定时任务首先,当然是添加依赖...
  • 定时任务的选型及改造

    万次阅读 2018-03-24 23:18:39
    项目中用到了定时任务,项目之初为了快速开发上线,当时直接采用最简单的Linux自带的crontab;项目逐渐维定下来时,针对定时任务自己进行了相关研究,并根据项目实际情况进行了对比以及相关改造。 【比一比&改...
  • javascript的宏任务和微任务

    万次阅读 多人点赞 2018-04-11 20:28:19
    今天进行了人生中的第一次面试。结果凉凉了。但是还是学到了很多东西。其中在面试时面试官问了我一道题 setTimeout(function(){ console.log('1') }); ... new Promise(function(resolve){ ...
  •  有若干个任务需要在一台机器上运行。它们之间没有依赖关系,因此 可以被按照任意顺序执行。  该机器有两个 CPU 和一个 GPU。对于每个任务,你可以为它分配不 同的硬件资源:  1. 在单个 CPU 上运行。  2. 在两个 ...
  • 要定时执行一个脚本,直接vi /etc/crontab...然后我用 crontab -l 查看了任务,发现没有任何任务,然后按照其他解决方法 crontab -e 重新添加任务,这个任务是有了但是照样不执行!!请各位大神看看到底什么原因啊??
  • Qt屏蔽任务管理器

    万次阅读 2017-07-18 11:18:51
    2、获取任务管理器所在路径: #define TASKMANAGER "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System" 3、控制任务管理器屏蔽与否: void setTaskMa...
  • 用的Quartz,请问如何实现:在上一个任务执行完毕后,执行下一个任务?比如第一个任务是获取大量IP 第二个任务是查这些IP的地址,第二个任务需要在第一个任务执行完毕后3分钟,才开始执行,怎样实现?
  • win10底部任务栏无反应(鼠标一直转圈)

    万次阅读 热门讨论 2019-03-20 11:09:07
    win10底部任务栏无反应(鼠标一直转圈,系统假死) 目录 win10底部任务栏无反应(鼠标一直转圈,系统假死) 方法1 方法2 方法3 方法4: 这实际上是系统卡死了,假死了 方法1 ,最简单,重启电脑(这个我...
  • Hive对Hadoop MapReduce任务进行封装,通过jdbc的api接口可以发起hive任务。有些任务可能会解析一个或多个mapreduce任务。 如何监控hive的任务,再在外部时间较长的情况下,杀掉某些hive任务。 (1)通过JDBC接口...
  • Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听...
  • 定时任务cron表达式详解

    万次阅读 多人点赞 2018-05-18 11:04:35
    cron表达式顺序秒分钟小时日期月份星期年(可选)取值0-590-590-231-30(31)1-121-7允许特殊字符, - * /, - * /, - * /, - * / ? L W C, - * /, - * / L # C1970-2099, - * /字段含义*:代表所有可能的值-:指定范围,:...
  • 1.1创建任务表 CREATE TABLE `scheduled_task` ( `id` int(11) NOT NULL AUTO_INCREMENT, `task_key` varchar(128) NOT NULL COMMENT '任务key值(使用bean名称)', `task_desc` varchar(128) DEFAULT NULL ...

空空如也

1 2 3 4 5 ... 20
收藏数 652,421
精华内容 260,968
关键字:

任务