之前做数据同步时,用过timer、window服务,现在不用那么费事了,可以使用Quartz,并且配置灵活,使用cron表达式配置XML就可以。我用的是3.0.7版本支持.netcore。

  • 首先创建一个.netcore控制台应用程序,添加Quartz、Quartz.Jobs、Quartz.Plugins引用,这里面添加了PostgreSql数据库的连接方法,其它数据库可以做为参考,添加Npgsql、Npgsql.EntityFrameworkCore.PostgreSQL引用,目录结构如下
  • 创建数据库DBContext类
  • using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.EntityFrameworkCore; namespace QuartzPro.DbContext
    {
    public class PostgreDbContext : Microsoft.EntityFrameworkCore.DbContext
    {
    private string _conn;
    public PostgreDbContext(DbContextOptions<PostgreDbContext> options) : base(options)
    {
    }
    public PostgreDbContext(string conn)
    {
    _conn = conn;
    } protected override void OnModelCreating(ModelBuilder builder)
    {
    base.OnModelCreating(builder);
    //builder.Entity<syrequest_main>().ToTable("book", "pro");
    } // public virtual DbSet<book> book { get; set; } }
    }
  • 创建Job类
  • using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Extensions.Logging;
    using Quartz; namespace QuartzPro.Jobs
    {
    public class SyncUserInfoService : IJob
    {
    private readonly ILogger<SyncUserInfoService> _logger; public SyncUserInfoService()
    {
    _logger = BootStrapIoc.GetService<ILoggerFactory>().CreateLogger<SyncUserInfoService>();
    }
    public Task Execute(IJobExecutionContext context)
    {
    _logger.LogDebug($"SyncUserInfoService Execute start...");
    return Task.Run(() =>
    {
    using (StreamWriter sw = new StreamWriter(@"D:\print.txt", true, Encoding.UTF8))
    {
    sw.WriteLine(DateTime.Now + "任务执行中...");
    sw.Close();
    }
    });
    }
    }
    }
  • 创建依赖注入类
  • using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    using QuartzPro.DbContext; namespace QuartzPro
    {
    public static class BootStrapIoc
    {
    /// <summary>
    /// IOC容器
    /// </summary>
    private static IServiceCollection serviceCollection { get; } = new ServiceCollection(); /// <summary>
    /// 初始化IOC容器
    /// </summary>
    public static void InitIoc()
    { var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddEnvironmentVariables().Build(); var identityConn = configuration.GetConnectionString("IdentityConnection");
    //db
    serviceCollection.AddTransient(_ => new PostgreDbContext(identityConn));
    //log
    serviceCollection.AddLogging(configure =>
    {
    configure.AddConfiguration(configuration.GetSection("Logging"));
    configure.AddConsole();
    });
    //config
    serviceCollection.AddSingleton<IConfiguration>(configuration); } /// <summary>
    /// 获取实体
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static T GetService<T>()
    {
    return serviceCollection.BuildServiceProvider().GetService<T>();
    }
    }
    }

      

  • 创建任务监听XML文件
  • <?xml version="1.0" encoding="utf-8" ?>
    <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.0"> <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
    </processing-directives>
    <schedule> <!--同步用户信息:10分钟一次-->
    <job>
    <name>SyncUserInfoService</name>
    <group>GroupUserInfoManager</group>
    <description>同步用户信息</description>
    <job-type>QuartzPro.Jobs.SyncUserInfoService, QuartzPro</job-type>
    <durable>true</durable>
    <recover>false</recover>
    </job>
    <trigger>
    <cron>
    <name>TriggerSyncUserInfoService</name>
    <group>GroupTriggerUserInfoManager</group>
    <job-name>SyncUserInfoService</job-name>
    <job-group>GroupUserInfoManager</job-group>
    <start-time>2019-07-30T15:15:00.0Z</start-time>
    <cron-expression>0 0/10 * * * ?</cron-expression>
    <!--<cron-expression>1 0 0 * * ?</cron-expression>-->
    </cron>
    </trigger>
    </schedule>
    </job-scheduling-data>
  • json配置文件
  • {
    "Logging": {
    "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
    },
    "Console": {
    "IncludeScopes": true
    }
    },
    "ConnectionStrings": {
    "IdentityConnection": "User ID=admin;Password=123456;Host=.;Port=5432;Database=identities;"
    }
    }
  • Program类,注意该项目为控制台程序 UserInfoManager.xml和 appsettings.json,需要右键设置为可输出文件
  • using System;
    using System.Collections.Specialized;
    using System.Threading.Tasks;
    using Quartz;
    using Quartz.Impl; namespace QuartzPro
    {
    class Program
    {
    private static void Main(string[] args)
    {
    BootStrapIoc.InitIoc();
    var task = Run();
    task.Wait();
    task.ConfigureAwait(false);
    while (true)
    {
    Console.Read();
    }
    }
    public static async Task Run()
    {
    try
    {
    var properties = new NameValueCollection
    {
    ["quartz.plugin.triggHistory.type"] = "Quartz.Plugin.History.LoggingJobHistoryPlugin, Quartz.Plugins",
    ["quartz.plugin.jobInitializer.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins",
    ["quartz.plugin.jobInitializer.fileNames"] = "UserInfoManager.xml",
    ["quartz.plugin.jobInitializer.failOnFileNotFound"] = "true",
    ["quartz.plugin.jobInitializer.scanInterval"] = "120"
    };
    ISchedulerFactory sf = new StdSchedulerFactory(properties);
    IScheduler scheduler = await sf.GetScheduler();
    Console.WriteLine("start the schedule");
    await scheduler.Start();
    Console.WriteLine("end");
    }
    catch (SchedulerException se)
    {
    await Console.Error.WriteLineAsync(se.ToString());
    }
    catch (Exception ex)
    {
    Console.Write($"err={ex.ToString()}");
    }
    }
    }
    } 

.netcore控制台->定时任务Quartz的更多相关文章

  1. spring学习总结(mybatis,事务,测试JUnit4,日志log4j&slf4j,定时任务quartz&spring-task,jetty,Restful-jersey等)

    在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表( ...

  2. windows下建立netcore控制台程序,然后传送到centos7下的docker容器里运行

    1.首先,在window下用vs2017开发netcore控制台项目. 2.把建立好的项目传送到centos7下面的容器里. docker cp sharefoldersforwindows/ 359 ...

  3. spring多个定时任务quartz配置

    spring多个定时任务quartz配置 <?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.spring ...

  4. Java生鲜电商平台-定时器,定时任务quartz的设计与架构

    Java生鲜电商平台-定时器,定时任务quartz的设计与架构 说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生 ...

  5. 集群服务器+定时任务(Quartz) 重复执行的问题

    x StackExchange.Redis private readonly IDatabase _db; string key = string.Concat("{自己命名的Redis前缀 ...

  6. spring -boot定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现

    spring 定时任务 quartz 基于  MethodInvokingJobDetailFactoryBean 实现 依赖包 如下 <dependencies> <depende ...

  7. .net core 2.1控制台使用Quartz.net实现定时任务执行

    权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33435149/article/de ...

  8. Spring框架下的定时任务quartz框架的使用

    手头的这个项目需要用到定时任务,但之前没接触过这东西,所以不太会用,从网上找资料,大致了解了一下,其实也不难.Java的定时任务实现有三种,一种是使用JDK自带的Timer那个类来实现,另一种是使用q ...

  9. SpringBoot系列:Spring Boot集成定时任务Quartz

    一.关于Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.在java企业级应用中,Q ...

随机推荐

  1. puppet5.1 安装与配置

    一.Puppet概念 简介 当服务器数量达到一定的规模时,仅依靠人为完成批量部署服务器个资源的配置,运维工作将变得繁琐且容易出错,为了解决这一问题,我们应该怎么办呢?我们可以引入一批工具,这批工具可编 ...

  2. 综合5项百度大脑AI技术,快速构建智能交通方案

    一.整体方案:思路:整合百度AI功能,通过百度AI解决.优化在公交运行过程中遇到的运营.管理.安全等方面的问题.具体如下: 安全方面:通过驾驶员检测+语音合成,对驾驶员状态进行实时检测,跟踪,告警.  ...

  3. PMBOK 指南 第二章 项目运行环境

    2.1概述 事业环境因素(EEF)源于项目外部(往往企业外部) 组织过程资产(OPA)源于企业内部 2.2 事业环境因素 项目团队不能控制 2.2.1 组织内部的事业环境因素 组织文化.结构和治理 设 ...

  4. Repository封装方法

    1.创建依赖的实体类 /// <summary> /// 泛型实体基类 /// </summary> /// <typeparam name="TPrimary ...

  5. Java 添加超链接到Word文档

    对特定元素添加超链接后,用户可以通过点击被链接的元素来激活这些链接,通常在被链接的元素下带有下划线或者以不同的颜色显示来进行区分.按照使用对象的不同,链接可以分为文本超链接,图像超链接,E-mail链 ...

  6. 精通awk系列(1):安装新版本的gawk

    回到: Linux系列文章 Shell系列文章 Awk系列文章 安装新版本gawk awk有很多种版本,例如nawk.gawk.gawk是GNU awk,它的功能很丰富. 本教程采用的是gawk 4. ...

  7. MTDDL 美团分布式数据访问中间件(转)

    MTDDL 美团分布式数据访问中间件(转) 原文地址:MTDDL--美团点评分布式数据访问层中间件 因原文文字和图显示有问题,故整理于此,仅供参考. 业界方案 组件 简介 Atlas Qihoo 36 ...

  8. Checkedlistbox只能单选不能多选

    private void Checkedlistbox_ItemCheck(object sender, ItemCheckEventArgs e) { ; i < chkCountry.Ite ...

  9. python3 print() 函数带颜色输出 示例

    1.1 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表示就 ...

  10. 基于Maven 的 Spring MVC

    Spring MVC 他是基于MVC的设计模式做出来的,他是Spring对Servlet的进一步的封装 MVC:Model  View  Controller 如何使用Spring MVC?(Spri ...