引言在日常业务系统开发中,我们尝尝有这样的一个需求:判断某个值在数据库中是否存在。常见的做法之一是使用COUNT(*)或者COUNT(1)函数,但是,在仅需判断记录是否存在而不关注具体数量的情况下,采用EXISTS子句或LIMIT1查询往往能提供更高的查询性能和更低的系统资源消耗。COUNT()函数的局限性使用COUNT(*)或者COUNT(1)先查询出来这个值在数据库中对应的记录的行数,然后在代码中判断sql返回的数据条数是否大于0,即可确认是否存在。SELECTCOUNT(*)FROMt_orderWHEREorder_no='c535cd19-9d1d-46';然后代码中判断:intco
引言在日常业务开发中,我们时常需要使用一些其他公司的服务,调用第三方系统的接口,这时就会涉及到网络请求,通常我们可以使用HttpClient,OkHttp等框架去完成网络请求。随着RESTfulAPI的普及,一个高效、简洁且易于维护的HTTP客户端库显得尤为关键。而本文主要介绍一款强大的网络客户端库:Retrofit2。Retrofit2简介Retrofit2是什么?Retrofit2是一个由Square公司精心打造并开源的Java与Android双平台适用的RESTfulAPI客户端库,其核心构建在性能卓越的OkHttp库之上。通过精巧的设计原理,Retrofit2将原本复杂的HTTP网络请
近期开发系统过程中遇到的一个需求,系统给定一个接口,用户可以自定义开发该接口的实现,并将实现打成jar包,上传到系统中。系统完成热部署,并切换该接口的实现。定义简单的接口这里以一个简单的计算器功能为例,接口定义比较简单,直接上代码。publicinterfaceCalculator{intcalculate(inta,intb);intadd(inta,intb);}该接口的一个简单的实现考虑到用户实现接口的两种方式,使用spring上下文管理的方式,或者不依赖spring管理的方式,这里称它们为注解方式和反射方式。calculate方法对应注解方式,add方法对应反射方式。计算器接口实现类的
一、写在前面代码被阅读的次数远多于编写的次数。我们可能花费很多时间来编写一段代码,一旦完成后大概率就再不会重新写它。当这段代码不仅是自己用时,就得注意了,每次自己或其他人浏览,需要快速知道它的作用及编写它的原因,因此可读性显得很重要,比如:>>>a="CaiXukun">>>b,c=a.split()>>>print(b,c,sep=',')看到这种脑阔痛。那么,每个人都有自己的编码风格,如何使整个团队趋于一致呢?PythonPEP8早已考虑到这种情况:https://peps.python.org/pep-0008/。我们可能互相不清楚每个人的风格,但又必须阅读与理解各自产出的代码,那么此时
解放生产力orm并发更新下应该这么处理求求你别再用UpdateById了背景很多时候为了方便我们都采用实体对象进行前后端的数据交互,然后为了便捷开发我们都会采用DTO对象进行转换为数据库对象,然后调用UpdateById将变更后的数据存入到数据库内,这样的一个做法有什么问题呢,如果你的系统并发量特别少甚至没有并发量那么这么做是没什么关系的无可厚非,但是如果你的系统有并发量那么在某些情况下会有严重的问题.案例1现在我们有一条待审核记录,其中status0表示待提交,1表示待审核idnamestatusdescription1记录10我是备注假设有两个用户,A用户想对当前记录的descriptio
抖音上比较有趣的罗盘时钟,今天用turtle来画一下,基本功能实现了,拿来练习一下turtle,感觉还可以吧turtle的安装sudoapt-getinstallpython3-tk罗盘时钟思路就是,绘制三个圆,在圆周填充字符,充当仪表,以当前时间为起点,然后定时重新绘制图形所以本例实现看着有点卡顿的感觉。运行环境:Python3.6 + Pygameimportpygame,sys,mathfromdatetimeimportdatetimedefprint_text(font,x,y,text,angle,color=(255,255,255)):"""粉丝朋友+我vx:paisen999
在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。一、@Retryable是什么?spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。二、使用步骤1.PO
在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。一、@Retryable是什么?spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。二、使用步骤1.PO
再谈为了提醒明知故犯(在一坑里迭倒两次不是不多见),由于业务系统中大量使用了springBootembeddedtomcat的模式运行,在一些运维脚本中经常看到Linux中kill指令,然而它的使用也有些讲究,要思考如何能做到优雅停机。何为优雅关机就是为确保应用关闭时,通知应用进程释放所占用的资源线程池,shutdown(不接受新任务等待处理完)还是shutdownNow(调用Thread.interrupt进行中断)socket链接,比如:netty、mq告知注册中心快速下线(靠心跳机制客服早都跳起来了),比如:eureka清理临时文件,比如:poi各种堆内堆外内存释放总之,进程强行终止会带
再谈为了提醒明知故犯(在一坑里迭倒两次不是不多见),由于业务系统中大量使用了springBootembeddedtomcat的模式运行,在一些运维脚本中经常看到Linux中kill指令,然而它的使用也有些讲究,要思考如何能做到优雅停机。何为优雅关机就是为确保应用关闭时,通知应用进程释放所占用的资源线程池,shutdown(不接受新任务等待处理完)还是shutdownNow(调用Thread.interrupt进行中断)socket链接,比如:netty、mq告知注册中心快速下线(靠心跳机制客服早都跳起来了),比如:eureka清理临时文件,比如:poi各种堆内堆外内存释放总之,进程强行终止会带