自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (2)
  • 收藏
  • 关注

原创 ASP.NET Core Identity框架介绍与使用

这是因为框架底层已经根据权限设计设计了相应的表并提供了权限设计的相关接口,引入Identity框架后,调用框架提供的API就可以完成我们的业务逻辑。Identity (标识)框架:采用的是基于角色的访问控制策略(Role-Based-Controll-Access),内置了对用户、角色等表的管理以及相关的接口,支持外部登录、2FA等。Identity框架使用EFcore对数据库进行操作(默认使用的SqlServer的数据库),这也意味值标识框架几乎支持所有的数据库。其中 Tkey代表了主键的类型。

2024-05-18 15:53:08 618

原创 Quartz.Net 整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案

经多方查证,可知IIS服务器默认设置会自动回收应用程序池,这意味着将释放内存,清除所有的资源。由于Job实例是由调度器调度运行的,当资源被回收后,调度器关闭后不会再自动打开,因此定时Job无法被调度运行。这意味着,当重启后,服务器会自动的请求http://xxxxxx:8002/Start/StartWeb 这个请求。引起注意的是:在任务结束后的任务监听器中的邮件并没有发出,这意味着任务实例并没有被成功调度。预加载的功能默认是没有安装的,所以为了配置预加载的功能需要先安装这个功能。

2024-05-17 17:41:06 731

原创 Quartz.Net(2)——NetCore3.1整合Quartz.Net

在定义Job时,用到了一个自定义特性JobAttribute,标注在实现了IJobIJob类上,标明该任务的分组,名称,描述 ,触发器触发时的Corn表达式。在实际运行的任务中将依赖于其他服务 如数据库服务、配置服务等,这里可以通过构造函数注入的方式引入其他的服务/// 自定义特性,用来标注Job运行信息/// Job运行的Corn表达式set;/// Job组set;/// Job名称set;/// Job描述set;/// 新进员工创建用户刷脸照片Job。

2024-05-10 10:34:27 848 1

原创 Quartz.Net(1)

Quartz 中也有自己的切面编程逻辑,可以通过添加监听器的方式,去给工作任务装配额外的工作逻辑,比如记录日志、发送通知或其他自定义业务逻辑。的类来定义一个在触发器触发时的切面类。使用触发器的监听器类时,同样只需要加入到调度器的ListenerManager中。除了可以在Job上增加AOP操作,也能针对触发器增加AOP操作。调度器中去装配JobListener。

2024-05-10 09:48:15 441

原创 NetCore3.1 Controller中直接返回JObject对象抛出异常解决方案

在StartUp中的服务配置类中修改默认的关于序列化器的配置。运行单元测试方法后,发现Newtonsoft.Json可以正常序列化JObject对象,而System.Text.Json不能序列化JObject 类型的对象。因此需要替换到Web项目中的默认序列化器。这是因为在Web项目中,响应结果的的序列化器使用的System.Text.Json包下的。它无法直接序列化JObject类型的对象。在NetCore 3.1的Web项目中,Controller有一个方法直接返回JObject对象时,抛出了异常。

2024-03-28 13:57:18 514

原创 WebClient上载文件——实现将本地文件同步到远端服务器上

本片文章主要提供了一个本地文件同步到远端服务器的一个参考方法,如有其它的解决方案希望和大家一起共享。

2024-03-22 16:35:07 740

原创 EFcore的实体类配置

该文章使用的是MySQL的数据库,这里使用到了模型驱动开发的模式【现有实体类,后有数据库表。需要使用到迁移指令的使用,本篇文章的重点不是迁移指令的使用,所以忽略该内容】Data Annotation 相较于使用FluentAPI的方式更为简洁,只需要使用特性标注即可,不需要单独的写配置类,不过FluentAPI更为强大,能够完全替代Data Annotation ,但是使用特性的方式则无法完全取代FluentAPI。

2024-03-20 22:20:06 595

原创 C#多线程(5)——异步方法async与await

在上一章节中,为大家介绍了,TPL是从.NetFramwork4.0后引入的基于异步操作的一组API,核心关注于任务【Task和TaskT简化了我们异步编程的步骤,但在C#5.0时,引入了新的语言特性——异步方法,是一种语法糖,是TPL之上的更高级别的抽象,它遵循了基于任务的异步模式,仅仅只使用了async与await关键字,更加简化了异步编程,可以避免性能瓶颈并增强应用程序的总体响应能力。

2024-03-13 11:26:05 1065

原创 C#多线程(4)——任务并行库TPL

TPLTPL(Task Parallel Library)任务并行库,是从.NetFramwork4.0后引入的基于异步操作的一组API。TPL的底层是基于多线程实现的,但是它相较于直接使用多线程,更为简单,它向程序员隐藏了与线程池交互的底层代码。在.NetFramwork4.0后,微软更推荐程序员使用TPL去编写多线程代码或者并行代码。TPL的核心是任务,一个任务代表了一个异步操作,该操作可以使用或不适用独立的线程运行。

2024-03-06 15:41:31 1133

原创 C# 多线程(3)——线程池

线程是计算机宝贵的资源,频繁的创建和销毁线程将会大量的占用计算机资源(为每个线程单独分配内存空间,并且多线程下的CPU时间片的切换也会耗费一定的时间)。为了充分利用硬件资源以及避免线程过多的创建和销毁,可用利用线程池\textcolor{red}{线程池}线程池来管理工作线程。使用者把任务(需要执行的代码)交给线程池,也就是加入线程池的任务队列\textcolor{red}{任务队列}任务队列,工作线程完成之前的任务后,就继续从队列中取任务执行。

2024-03-01 16:14:16 1295

原创 NetCore实现输入用户名和密码后访问Swagger页面

在后端编程时,通常使用swagger文档来呈现接口文档。为了接口的安全性,可通过输入用户名和密码的方式来进行验证。本文介绍如何通过自定义中间件来实现访问接口文档前需要进行Basic认证。

2024-01-31 16:02:40 1203

原创 C# 多线程(2)——线程同步

当在同一时刻多个线程操作共享资源时就会导致数据的错误,但是如果在单一线程中按照顺序就不出现这样的问题,这也就引申出线程同步的内容,保证多个线程提升性能的前提下,也不会出现程式数据的错误,重点就是让多个线程按照一定的顺序同步的执行代码,就是线程同步的概念。lock 排它锁的使用,确保了多个线程在访问竞态代码块时,只有一个线程是获得CPU时间片的,其他的线程处于阻塞中,并处于一个等待队列中。直到锁被释放,等待的线程属于先到先得的情形,依次等待获得锁去执行竞态代码块,保证了线程同步,因此可以保证线程的安全。

2024-01-30 09:51:33 1134

原创 C# 多线程(1)——线程基础

进程是计算机概念,一个程序运用时占用的的所有**计算机资源**(CPU、内存、硬盘、网络)统称为进程。线程是操作系统中能够独立运行的最小单位,是进程(包含多个线程)中的一部分,线程也有自己的计算资源,多个线程间可以共享进程的资源。C#中的Thread其实是对计算机中线程概念的封装(API的封装),它的执行归根结底是向底层操作系统申请了线程资源。在C#中的线程实现包括 Thread/ThreadPool/Task/Await Async。多线程的本质是资源换性能(CPU、内存、硬盘、网络)。好处是提高利

2023-11-28 15:43:21 1188

原创 利用ZipInputStream(解压)/ZipOutputStream(压缩)文件夹

在操作.zip的压缩包时,可以用到高级流ZipInputStream和ZipOutputStream。.zip文件中的每个文件夹和文件都是一个ZipEntry对象。解压和压缩的本质就是操作每个ZipEntry对象,只能操作后缀为.zip的文件。

2023-10-20 11:07:47 1304

原创 Redis持久化——RDB和AOF

Redis数据库是内存数据库,一旦出现服务宕机,那么内存中的数据就容易丢失。所以需要进行redis的持久化动作。Redis持久化是指将Redis内存数据持存储到磁盘中,若出现了Redis服务宕机后,能够从硬盘中再恢复到Redis内存中。Redis的持久化方式包含RDB和AOF 两种方式。

2023-08-15 14:36:35 666

原创 Redis实战(5)——Redis实现消息队列

消息队列,顾名思义,就是一个存放消息的队列。最简单的消息队列包含3个角色。$\textcolor{red}{Redis 提供了三种实现消息队列的方式,基于List结构、PubSub、Stream结构}$

2023-08-05 11:10:51 5957

原创 Redis实战(4)——Redisson分布式锁

当成功获得锁时,返回null,获得锁失败时,获得锁剩余的持有时间。做到了锁重试,且不是无休止的盲目等待去获得锁的信息。至于锁的超时释放问题,redisson 提供了watchdog机制,当不设定锁的超时时间,即默认设置为-1 时,利用watchdog机制,每隔一段时间 (internalLockLeaseTime 3),重置锁的有效时长。即每一个redis节点都当成Master节点来看待,在获得锁时,必须每一个Redis节点都获得锁成功才算成功,释放锁时需要每一个Redis节点都释放锁成功才算成功。

2023-08-02 09:09:07 746

原创 Redis实战(3)——缓存模型与缓存更新策略

缓存就是数据交换的缓冲区,是存贮数据的临时区,一般读写性能较高\textcolor{red}{是存贮数据的临时区,一般读写性能较高}是存贮数据的临时区,一般读写性能较高。缓存可在多个场景下使用以一次web请求为例,演示不同阶段的缓存作用\textcolor{blue}{以一次web请求为例,演示不同阶段的缓存作用}以一次web请求为例,演示不同阶段的缓存作用web开发时:浏览器发送请求时通常会缓存不经常变更静态文件,如css、js文件。

2023-07-28 16:47:38 1418

原创 Redis实战(2)——互斥命令用于构建分布式锁

在单体应用中,线程锁是可以让多个线程串行执行一段代码逻辑的。不过在集群环境或者是分布式的环境下,线程锁无法保证线程串行运行,从而出现线程安全的问题。根本的原因在于,在集群分布式环境下\textcolor{red}{集群分布式环境下}集群分布式环境下,用于确保线程串行运行的线程监视器有多个。因为服务如果是分布式的部署,那么一定是在多个JVM中运行的。每个JVM中都将维护自己的堆栈空间。线程监视器同样如此。每个线程监视器都有可能被线程键入,所以集群、分布式环境下线程锁无线确保线程安全。

2023-07-28 15:16:05 806

原创 Redis应用(1)——生成全局唯一标识ID

在实际项目中,根据不同的业务逻辑需要生成唯一的标识id ,如购买商品生成的订单号。尽管这个标识id功能非常的简单,但是如果不能成功的生成唯一标识id,那将会影响后续的业务逻辑。我们可以使用数据库去生成唯一标识id,但是其性能受到数据库性能的硬性,且随机标识id过于简单会暴露业务信息。所以意味着,生成唯一标识的逻辑方法需要高性能且高可用。并且需要高安全性,不能暴露出业务信息。在这篇文章中,将使用redis数据库区生成唯一的标识id生成的逻辑是时间戳redis自增序列号。

2023-07-27 20:19:31 459

原创 Elasticsearch(3)——JavaAPI操作Elasticsearch

ES 官方提供了三种 Java API 接口,分别是 TransportClient、Java Low Level REST Client、 Java High Level REST Client。原因是 ES 版本迭代较快,TransportClient 使用了特定的传输协议,如果其版本与 ES 实例版 本不一致则可能导致兼容性问题。创建名为post的索引 ,使用CreateIndexRequest,等价于 PUT请求。文档需要操作的字段信息如上 ,包含文章Id,文章作者、创建时间、文章标题、内容等。

2023-07-04 16:52:15 2571 1

原创 Elasticsearch(2)——映射关系

映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存储这些字段的。Elasticsearch 支持如下简单字段类型:(1) 字符串: text,keyword(2)整数:byte,short,integer,long(3)浮点数: float,double(4) 布尔型: boolean(5) 日期: date。

2023-07-04 16:49:04 713

原创 Elasticsearch(1)——倒排索引与HTTP操作Elasticsearch

核心产品包括 Elasticsearch【存储数据】、Kibana【展示数据】、Beats 和 Logstash【收集与传输数据】(也称为ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。sa是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。

2023-07-04 10:25:09 747

原创 AspNetCore中的依赖注入详解

ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制, ASP.NET Core通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务, ASP.NET Core在内部专门维护了一个IOC容器来提供所需的服务。服务的创建到销毁的过程完全交给IOC容器,大大降低了耦合度。依赖注入旨在实现针对服务对象的动态提供。

2023-05-30 10:08:22 1635

原创 AspNetCore中的配置文件详解

除此之外,还提供其他的配置数据源 【不同的ConfigurationProvider】,允许系统从多个配置源中读取配置文件,如环境变量或者系统内存。真实项目中涉及的配置大都具有一个结构化的层次结构,所以在配置模型中的Configuration对象同样具有这样的结构。程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应不同环境的需求,这些信息就是“配置”。

2023-05-17 19:32:49 961 1

原创 AspNetCore中的中间件详解【超详细】

虽然中间件的本质是一个Func middleware 对象,中间件的类型可分为两种,下面自定义实现以及记录请求IP地址的中间件弱类型中间件(1) 定义Ip中间件//调用下一个请求中间件 await requestDelegate . Invoke(context);} }(2)增加Use的拓展方法。

2023-05-08 17:51:53 2380

原创 SpringMVC——响应处理(2)之内容协商

根据**客户端**接收能力的不同,服务端返回不同的媒体类型的数据。这是由**HTTP协议**定的。Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。如文本文件 **text/html**,支持text和html两种内容格式。若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值1,用分号(;)进行分隔。权重值 q 的范围是 0~1当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。

2023-02-28 10:41:46 301

原创 SpringMVC——响应处理(1)【包含源码分析】

在解析上面这段代码的时候需要,需要了解一个概念内容协商(浏览器在发送请求的时候告知服务器端将接受怎样的返回数据类型,默认通过在请求头中设定Accept头)查看RequestResponseBodyMethodProcessor的supportsReturnType方法的实现源码如下。内容协商(浏览器默认以请求头的方式告知服务器端允许接受的内容类型)是一个处理消息转换的标准接口,不同的内容类型有具体的实现类去处理。服务器根据自身的能力,决定服务器能生产什么样的内容类型的数据。解析的结果正如归纳的步骤而言。

2023-02-27 18:16:46 382

原创 mybatis-spring-boot-starter中设定多数据源,并实现Durid的监控

实现功能:1: 配置两个数据源,根据不同的mapper路径使用不同的数据连接2 :使用Druid连接池3:Druid 可监控多个数据源的sql执行操作分析:查看mybatis_spring_boot_stater中关于自动装配的类可知【如上图】,需要自定义实现SqlsessionFactory和SqlSessionTemplate的Bean,其中方法依赖于DataSource数据源。所以需要根据不同的数据源配置,自定义配置不同的数据源Bean。

2023-02-16 14:28:18 1068 1

原创 注解ConfigurationProperties、EnableConfigurationProperties的用法

ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置。这里可以看到仅仅通过new关键字实例一个User对象,并没有看到set 属性的操作,这是Spring框架帮助我们做了这一步,所以User类不能忽略 get set 方法,否则无法将配置信息设置到对应的类属性中。ConfigurationProperties注解可用在类上和方法上(必须是配置类中的标注了@Bean注解的方法)。

2023-02-15 11:18:05 3527 1

原创 SpringBoot整合Druid数据源(实行监控功能)

在上篇文章中分析了数据连接池(Durid)在应用中可以做到资源重用,提升系统响应速度,避免数据库连接遗漏。它除了是一个高性能数据库连接池之外,更是一个自带监控的数据库连接池。

2023-02-11 16:12:26 3116

原创 JDBC与Druid连接池

JDBC(java database connectivity )是Java语言连接操作关系型数据库的一套解决方案,屏蔽了底层各数据库不同的差异。具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异, 具体实现是各大数据库厂商来实现的,即各个不同的驱动jar包。java----jdbc统一接口----各关系型数据库。

2023-02-10 14:18:07 928

原创 HttpGet请求与Post请求中参数乱码原因剖析与解决方案

以上分析可知,导致乱码的情况可以归纳成输入的字符集与输出的字符集不一致的情况,为了解决乱码的问题,需要将前后的字符集设置成一致。

2023-01-11 11:37:58 10132 1

原创 .Net开发——EFCore

EFCore(EntityFramworkCore)是对底层ADO.NET重新封装的一个数据操作框架,因此ADO.NET支持的多种数据库都可以被EFCore支持。EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:- 使 .NET 开发人员能够**使用 .NET 对象处理数据库**。- 避免SQL的编写。- 开发更加高效

2022-11-16 15:11:54 2721

原创 .Net学习——Nlog日志框架的使用

Net没有内置的文本日志提供者,对于实际需要记录日志到文本文件中的需求不相匹配,常用的第三方日志框架包括Log4Net,Nlog,SeriLog。考虑到系统的兼容性与使用的简易程度,推荐使用NLog框架记录系统运行日志记录。NLog是一个灵活且免费的日志记录平台,适用于各种.NET平台,包括.NET标准。NLog 使写入多个目标变得容易。(数据库、文件、控制台,调试输出,电子邮件,时间日志)并动态更改日志记录配置。易于配置NLog 非常容易配置,无论是通过配置文件还是以编程方式。

2022-11-12 17:27:39 2249

原创 .Net学习——Linq常用拓展方法使用

本文主要演示Linq常用拓展方法。包括Where(),Single(),SingleOrDefault(),First(),学会并掌握常用的Linq常用拓展方法,可以更快的处理数据源,语法逻辑与SQL类似。

2022-11-04 10:45:56 1162

原创 .Net学习——委托

委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。调用委托变量时,就是执行该变量指向的方法。委托与c#中的普通变量【如int i=5】类似,唯一区别在于委托指向方法,普通变量执向整数为5的空间委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。关键字 返回类型 委托的名称 参数列表。

2022-11-02 16:09:06 2633

原创 Quartz框架之触发器(3)

当计划程序启动时,它会搜索任何已触发错误的持久性触发器,然后根据其单独配置的错误触发指令更新每个触发器。Simple Trigger的应用场景通常是在特定时间时刻执行一次,或者在特定时间点执行,然后按特定时间间隔重复。Trigger接口是Quartz框架中关于触发器的接口,可通过TriggerBuilder类来实例化Trigger的实例信息。Quartz框架中的触发器的主要功能就是指明何时该触发任务的执行, 触发器包含一系列的定义信息,开发人员可根据实际情形自定义对应的触发器。

2022-09-27 16:44:05 918

原创 Quartz框架之Job和JobDetail(2)

当触发器触发时,将加载它所关联的 JobDetail(实例定义),并通过计划程序上配置的 JobFactory 实例化它所引用的作业类。与任务的执行过程中,不包含任何外来的参数信息相反,有状态任务意味着任务的执行需要外部的条件,比如有一个高温预警任务,需要判定当前温度是否为高温(大于39摄氏度),并决定是否发送短信通知。每次触发时,通过任务类型的无参数构造函数实例化HelloJob 对象,然后再执行实例对象中的execute方法。由上章节可知,Job接口是具体的任务逻辑类必须要实现的接口。

2022-09-26 20:49:17 475

原创 Quartz学习(1)

Quartz 是一个功能丰富的开源作业调度库,几乎可以集成到任何 Java 应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十个,数百个甚至数万个作业;其任务被定义为标准 Java 组件的作业,这些组件几乎可以执行您可以对它们进行编程执行的任何操作。Quartz 调度程序包括许多企业级功能,例如支持 JTA 事务和集群如果你的应用程序具有需要在给定时刻执行的任务,或者如果你的系统具有重复的维护工作,则Quartz可能是你理想的解决方案。

2022-09-24 19:46:19 649

收集資料系統-correctMessage

技术栈,Springboot, SwaggerAPI接口文档, DozerJavaBean转换,Mybatis

2022-03-09

mail1.7z 个人存放的项目报告 用于上传下载

项目报告

2021-10-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除