.netcore控制台->定时任务Quartz
之前做数据同步时,用过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的更多相关文章
- spring学习总结(mybatis,事务,测试JUnit4,日志log4j&slf4j,定时任务quartz&spring-task,jetty,Restful-jersey等)
在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表( ...
- windows下建立netcore控制台程序,然后传送到centos7下的docker容器里运行
1.首先,在window下用vs2017开发netcore控制台项目. 2.把建立好的项目传送到centos7下面的容器里. docker cp sharefoldersforwindows/ 359 ...
- spring多个定时任务quartz配置
spring多个定时任务quartz配置 <?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.spring ...
- Java生鲜电商平台-定时器,定时任务quartz的设计与架构
Java生鲜电商平台-定时器,定时任务quartz的设计与架构 说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生 ...
- 集群服务器+定时任务(Quartz) 重复执行的问题
x StackExchange.Redis private readonly IDatabase _db; string key = string.Concat("{自己命名的Redis前缀 ...
- spring -boot定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现
spring 定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现 依赖包 如下 <dependencies> <depende ...
- .net core 2.1控制台使用Quartz.net实现定时任务执行
权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_33435149/article/de ...
- Spring框架下的定时任务quartz框架的使用
手头的这个项目需要用到定时任务,但之前没接触过这东西,所以不太会用,从网上找资料,大致了解了一下,其实也不难.Java的定时任务实现有三种,一种是使用JDK自带的Timer那个类来实现,另一种是使用q ...
- SpringBoot系列:Spring Boot集成定时任务Quartz
一.关于Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.在java企业级应用中,Q ...
随机推荐
- Logstash组件详解(input、codec、filter、output)
logstash组件详解 logstash的概念及特点. 概念:logstash是一个数据采集.加工处理以及传输(输出)的工具. 特点: - 所有类型的数据集中处理 - 不同模式和格式数据的正常化 - ...
- Windows 10 - 查看系统剪切板历史
在之前的Windows版本(1809之前),Windows的剪切板历史一直都是对用户不可见的. 也就是它只保留最后一次的剪切记录,但是这个记录是什么,不知道!只能粘贴出来才知道. 但是现在变了,Win ...
- Ajax 的基本使用
Ajax简介 一门异步的加载技术,局部刷新 异步加载,可以在不重载整个网页的前提下,进行局部刷新 分为原生和JQ两种 JSON数据格式 Json对象转字符串: JSON.stringify() 字符串 ...
- Support URL
如您有任何疑问或者建议,请通过以下方式与我们取得联系,我们会尽快响应您的反馈: 邮箱:eighteyes_cn@163.com
- Redis简单命令(部分示例代码)
一.redis文件夹下的可执行文件(文章尾部有示例代码) 可执行文件 作用 redis-server 启动redis redis-cli redis命令行工具 redis-benchmark 基准测试 ...
- ceph工作原理
一.概述 Ceph是一个分布式存储系统,诞生于2004年,最早致力于开发下一代高性能分布式文件系统的项目.随着云计算的发展,ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之 ...
- React: 通过React.Children访问特定子组件
一.简介 React中提供了很多常用的API,其中有一个React.Children可以用来访问特定组件的子元素.它允许用来统计个数.map映射.循环遍历.转换数组以及显示指定子元素,如下所示: va ...
- 【STM32-V5】STM32F407开发板开源, 丰富软件资源, 强劲硬件配置, 配套500实例, 10套手册带视频教程2019-12-12
淘宝购买地址:购买地址链接 从2013年5月份发布至今,开发板硬件更新过6个版本,软件资料更新过85次.当前标准库最新版本V8.8,HAL库最新版本V1.1 安富莱微信公共平台,欢迎大家关注(打造高质 ...
- Microsemi Libero使用技巧——使用第三方编辑器Notepad++
前言 与Xilinx的ISE和Altera的Quartus一样,Microsemi的编辑器也支持指定第三方编辑器. Microsemi自带的编辑器,没有自动补全功能,也不支持中文注释,非常不好用,为了 ...
- Vue结合后台导入导出Excel问题详解后续
接前几天写的一篇博客 https://www.cnblogs.com/ttjm/p/11307462.html 在ie浏览器测试发现打不开,经调查问题如下 1 如果在本地开发调试,请求接口报错如下 ...