【netcore基础】.Net core自动作业之Hangfire
nuget搜索:Hangfire
安装即可,这里我选择的是 1.7.0-beta1 版本
我是用这个集成到了 mvc api里
这里需要在 Startup 文件里进行如下配置
在配置方法 ConfigureServices 里配置数据库,这是用的是sqlserver数据库初始化
var hangfireConnStr = _configuration["AppSettings:HangfireConnectionString"];
services.AddHangfire(configuration => configuration.UseSqlServerStorage(hangfireConnStr));
如果数据库是mysql,使用下面语句初始化,需要引用 Hangfire.MySql
var hangfireMysqlConnStr = _configuration["AppSettings:HangfireMysqlConnectionString"];
services.AddHangfire(configuration => configuration.UseStorage(
new MySqlStorage(
hangfireMysqlConnStr,
new MySqlStorageOptions
{
TransactionIsolationLevel = IsolationLevel.ReadCommitted,
QueuePollInterval = TimeSpan.FromSeconds(),
JobExpirationCheckInterval = TimeSpan.FromHours(),
CountersAggregateInterval = TimeSpan.FromMinutes(),
PrepareSchemaIfNecessary = true,
DashboardJobListLimit = ,
TransactionTimeout = TimeSpan.FromMinutes(),
TablesPrefix = ""
})));
在配置方法 Configure 里需要配置下管理员后台
app.UseHangfireServer();
app.UseHangfireDashboard();
这样我们就可以通过后台操作管理作业了
地址如下
https://localhost:5001/hangfire

这里可以看到正在跑的作业和执行情况

不过这个后台只能在服务器本机上访问,为了保证安全,无法通过域名访问操作
添加调用代码很简单,在每次系统启动的时候,配置如下,如果没有添加;有了就更新
RecurringJob.AddOrUpdate(() => UpdateMerchIndex(), Cron.MinuteInterval());
这里是指每隔三分钟调用一次 UpdateMerchIndex() 方法。
是不是很简单呢
数据库需要初始化几个表

这里附送数据库初始化建表SQL语句
sqlserver
USE [GEDU_Hangfire]
GO
/****** Object: Table [HangFire].[Job] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Job](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[StateId] [bigint] NULL,
[StateName] [nvarchar](20) NULL,
[InvocationData] [nvarchar](max) NOT NULL,
[Arguments] [nvarchar](max) NOT NULL,
[CreatedAt] [datetime] NOT NULL,
[ExpireAt] [datetime] NULL,
CONSTRAINT [PK_HangFire_Job] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[Hash] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Hash](
[Key] [nvarchar](100) NOT NULL,
[Field] [nvarchar](100) NOT NULL,
[Value] [nvarchar](max) NULL,
[ExpireAt] [datetime2](7) NULL,
CONSTRAINT [PK_HangFire_Hash] PRIMARY KEY CLUSTERED
(
[Key] ASC,
[Field] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[Counter] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Counter](
[Key] [nvarchar](100) NOT NULL,
[Value] [int] NOT NULL,
[ExpireAt] [datetime] NULL
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[AggregatedCounter] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[AggregatedCounter](
[Key] [nvarchar](100) NOT NULL,
[Value] [bigint] NOT NULL,
[ExpireAt] [datetime] NULL,
CONSTRAINT [PK_HangFire_CounterAggregated] PRIMARY KEY CLUSTERED
(
[Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[Set] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Set](
[Key] [nvarchar](100) NOT NULL,
[Score] [float] NOT NULL,
[Value] [nvarchar](256) NOT NULL,
[ExpireAt] [datetime] NULL,
CONSTRAINT [PK_HangFire_Set] PRIMARY KEY CLUSTERED
(
[Key] ASC,
[Value] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[Server] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Server](
[Id] [nvarchar](100) NOT NULL,
[Data] [nvarchar](max) NULL,
[LastHeartbeat] [datetime] NOT NULL,
CONSTRAINT [PK_HangFire_Server] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[Schema] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[Schema](
[Version] [int] NOT NULL,
CONSTRAINT [PK_HangFire_Schema] PRIMARY KEY CLUSTERED
(
[Version] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[List] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[List](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Key] [nvarchar](100) NOT NULL,
[Value] [nvarchar](max) NULL,
[ExpireAt] [datetime] NULL,
CONSTRAINT [PK_HangFire_List] PRIMARY KEY CLUSTERED
(
[Key] ASC,
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[JobQueue] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[JobQueue](
[Id] [int] IDENTITY(1,1) NOT NULL,
[JobId] [bigint] NOT NULL,
[Queue] [nvarchar](50) NOT NULL,
[FetchedAt] [datetime] NULL,
CONSTRAINT [PK_HangFire_JobQueue] PRIMARY KEY CLUSTERED
(
[Queue] ASC,
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[State] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[State](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[JobId] [bigint] NOT NULL,
[Name] [nvarchar](20) NOT NULL,
[Reason] [nvarchar](100) NULL,
[CreatedAt] [datetime] NOT NULL,
[Data] [nvarchar](max) NULL,
CONSTRAINT [PK_HangFire_State] PRIMARY KEY CLUSTERED
(
[JobId] ASC,
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [HangFire].[JobParameter] Script Date: 01/22/2019 14:16:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [HangFire].[JobParameter](
[JobId] [bigint] NOT NULL,
[Name] [nvarchar](40) NOT NULL,
[Value] [nvarchar](max) NULL,
CONSTRAINT [PK_HangFire_JobParameter] PRIMARY KEY CLUSTERED
(
[JobId] ASC,
[Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: ForeignKey [FK_HangFire_JobParameter_Job] Script Date: 01/22/2019 14:16:29 ******/
ALTER TABLE [HangFire].[JobParameter] WITH CHECK ADD CONSTRAINT [FK_HangFire_JobParameter_Job] FOREIGN KEY([JobId])
REFERENCES [HangFire].[Job] ([Id])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [HangFire].[JobParameter] CHECK CONSTRAINT [FK_HangFire_JobParameter_Job]
GO
/****** Object: ForeignKey [FK_HangFire_State_Job] Script Date: 01/22/2019 14:16:29 ******/
ALTER TABLE [HangFire].[State] WITH CHECK ADD CONSTRAINT [FK_HangFire_State_Job] FOREIGN KEY([JobId])
REFERENCES [HangFire].[Job] ([Id])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [HangFire].[State] CHECK CONSTRAINT [FK_HangFire_State_Job]
GO
mysql
/*
Navicat Premium Data Transfer Source Server : mysql47.93.198.115
Source Server Type : MySQL
Source Server Version : 50562
Source Host : 47.93.198.115:3306
Source Schema : gedu_hangfire Target Server Type : MySQL
Target Server Version : 50562
File Encoding : 65001 Date: 22/01/2019 14:17:37
*/ SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for aggregatedcounter
-- ----------------------------
DROP TABLE IF EXISTS `aggregatedcounter`;
CREATE TABLE `aggregatedcounter` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Key` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` int(11) NOT NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_CounterAggregated_Key`(`Key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3482 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for counter
-- ----------------------------
DROP TABLE IF EXISTS `counter`;
CREATE TABLE `counter` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Key` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` int(11) NOT NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_Counter_Key`(`Key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17107 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for distributedlock
-- ----------------------------
DROP TABLE IF EXISTS `distributedlock`;
CREATE TABLE `distributedlock` (
`Resource` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`CreatedAt` datetime NOT NULL
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for hash
-- ----------------------------
DROP TABLE IF EXISTS `hash`;
CREATE TABLE `hash` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Key` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Field` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_Hash_Key_Field`(`Key`, `Field`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 29028 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for job
-- ----------------------------
DROP TABLE IF EXISTS `job`;
CREATE TABLE `job` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`StateId` int(11) NULL DEFAULT NULL,
`StateName` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
`InvocationData` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Arguments` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`CreatedAt` datetime NOT NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_Job_StateName`(`StateName`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5703 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for jobparameter
-- ----------------------------
DROP TABLE IF EXISTS `jobparameter`;
CREATE TABLE `jobparameter` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`JobId` int(11) NOT NULL,
`Name` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_JobParameter_JobId_Name`(`JobId`, `Name`) USING BTREE,
INDEX `FK_JobParameter_Job`(`JobId`) USING BTREE,
CONSTRAINT `FK_JobParameter_Job` FOREIGN KEY (`JobId`) REFERENCES `job` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 17107 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for jobqueue
-- ----------------------------
DROP TABLE IF EXISTS `jobqueue`;
CREATE TABLE `jobqueue` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`JobId` int(11) NOT NULL,
`Queue` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`FetchedAt` datetime NULL DEFAULT NULL,
`FetchToken` varchar(36) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_JobQueue_QueueAndFetchedAt`(`Queue`, `FetchedAt`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5703 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for jobstate
-- ----------------------------
DROP TABLE IF EXISTS `jobstate`;
CREATE TABLE `jobstate` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`JobId` int(11) NOT NULL,
`Name` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Reason` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
`CreatedAt` datetime NOT NULL,
`Data` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `FK_JobState_Job`(`JobId`) USING BTREE,
CONSTRAINT `FK_JobState_Job` FOREIGN KEY (`JobId`) REFERENCES `job` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for list
-- ----------------------------
DROP TABLE IF EXISTS `list`;
CREATE TABLE `list` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Key` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for server
-- ----------------------------
DROP TABLE IF EXISTS `server`;
CREATE TABLE `server` (
`Id` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Data` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`LastHeartbeat` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for set
-- ----------------------------
DROP TABLE IF EXISTS `set`;
CREATE TABLE `set` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Key` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Value` varchar(256) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Score` float NOT NULL,
`ExpireAt` datetime NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_Set_Key_Value`(`Key`, `Value`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 95 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Table structure for state
-- ----------------------------
DROP TABLE IF EXISTS `state`;
CREATE TABLE `state` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`JobId` int(11) NOT NULL,
`Name` varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
`Reason` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
`CreatedAt` datetime NOT NULL,
`Data` longtext CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL,
PRIMARY KEY (`Id`) USING BTREE,
INDEX `FK_HangFire_State_Job`(`JobId`) USING BTREE,
CONSTRAINT `FK_HangFire_State_Job` FOREIGN KEY (`JobId`) REFERENCES `job` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 17108 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
redis配置(Startup.cs 文件里的 ConfigureServices)
//注入Hangfire服务 redis
var hangfireRedisConnStr = Configuration["AppSettings:HangfireRedisConnectionString"];
_redis = ConnectionMultiplexer.Connect(hangfireRedisConnStr);
var prefix = Configuration["AppSettings:HangfireRedisPrefixName"];
var option = new RedisStorageOptions
{
Prefix = prefix,
Db = ,
};
if (int.TryParse(Configuration["AppSettings:HangfireRedisDefaultDatabse"], out int dfaultdb))
{
if (dfaultdb >= && dfaultdb <= )
{
option.Db = dfaultdb;
}
}
services.AddHangfire(config => config.UseRedisStorage(_redis, option));
配置文件
{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
},
"AppSettings": {
"HangfireRedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=1,ssl=false,writeBuffer=10240",
"HangfireRedisPrefixName": "{hangfire_muniumini}:",
"HangfireRedisDefaultDatabse": "",
"RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=1,poolsize=50,ssl=false,writeBuffer=10240",
"UseSwagger": "true"
},
"AllowedHosts": "*"
}
其中AppSetting里的配置说明
HangfireRedisConnectionString(连接字符串,格式参考上面的配置文件)
HangfireRedisPrefixName(redis的字典集名称)
HangfireRedisDefaultDatabse(redis默认数据库序号)
搞定
【netcore基础】.Net core自动作业之Hangfire的更多相关文章
- 循序渐进学.Net Core Web Api开发系列【17】:.Net core自动作业之Hangfire
nuget搜索:Hangfire 安装即可,这里我选择的是 1.7.0-beta1 版本 我是用这个集成到了 mvc api里 这里需要在 Startup 文件里进行如下配置 在配置方法 Config ...
- 【netcore基础】CentOS 7.6.1810 搭建.net core 2.1 linux 运行环境 nginx反向代理 supervisor配置自启动
之前写过一篇Ubuntu的环境搭建博客,感觉一些配置大同小异,这里重点记录下 nginx 作为静态 angular 项目文件服务器的配置 参考链接 [netcore基础]ubuntu 16.04 搭建 ...
- 【netcore基础】.Net core通过 Lucene.Net 和 jieba.NET 处理分词搜索功能
业务要求是对商品标题可以进行模糊搜索 例如用户输入了[我想查询下雅思托福考试],这里我们需要先将这句话分词成[查询][雅思][托福][考试],然后搜索包含相关词汇的商品. 思路如下 首先我们需要把数据 ...
- 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库
采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...
- Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。
Python3 与 C# 面向对象之-继承与多态 文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...
- 动画基础--基于Core Animation(3)
参考:https://zsisme.gitbooks.io/ios-/content/ 前面的文章动画基础--基于Core Animation(1),动画基础--基于Core Animation(2) ...
- .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2
上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...
- Core开发-后台任务利器Hangfire使用
Core开发-后台任务利器Hangfire使用 ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/ ...
- python基础一之课后作业:编写登录接口
1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...
随机推荐
- 从零开始优雅的使用mongodb实例
基本连接 一.创建express工程testmon express testmon 二.精简app.js var express = require("express"); var ...
- HTML5 Selection对象
一.实例1,设置网页选中内容并且复制到黏贴板 <p id='txtone'>发的FDSAFSDFDS!其实不管哪个行业, <img src='http://beijing.gongj ...
- Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理
1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...
- art.template 循环里面分组。
后台提供给我们一个数组,我们要用模版实现上面的格式输出怎么版呢? 下面就是解决方案: <h2>循环4个一组</h2> <script type="text/ht ...
- MySql之游标的使用
一:游标的使用场合 游标只能用于存储过程和函数中. 游标存储了检索语句的结果集,然后在存储过程和函数中可以通过游标来迭代访问结果集中的记录. 二:创建游标 CREATE PROCEDURE 存储过程名 ...
- (原)CNN中的卷积、1x1卷积及在pytorch中的验证
转载请注明处处: http://www.cnblogs.com/darkknightzh/p/9017854.html 参考网址: https://pytorch.org/docs/stable/nn ...
- C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]
文章来源:http://blog.csdn.net/starboybenben/article/details/49803315 C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编 ...
- 编程调节Win7/Win8系统音量的一种方法
不得不说, 自Win7(好像是吧), Windows的音量调节功能比以前更人性化了.... 但编程接口却变得更加复杂了............. 还要用到IAudioEndpointVolu ...
- oracle本地编译问题
oracle10.2: --将过程重新编译为本地编译方式,提示有编译错误,经查提示未设置plsql_native_library_dir 参数 SQL> alter procedure p_xx ...
- GuavaCache学习笔记三:底层源码阅读
申明:转载自 https://www.cnblogs.com/dennyzhangdd/p/8981982.html 感谢原博主的分享,看到这个写的真好,直接转载来,学习了. 另外也推荐另外一篇Gua ...