储备资料
文章平均质量分 69
孩儿他爹爹
这个作者很懒,什么都没留下…
展开
-
优化api接口,返回格式,统一返回格式
微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为这篇主要聊API接口,所以我们聚焦这一点。转载 2022-11-14 10:55:47 · 783 阅读 · 0 评论 -
@Transactional 事务注解
至于这个的原因,发表下个人的理解吧,因为JVM的动态代理是基于接口实现的,通过代理类将目标方法进行增强,想一下也是啦,没有权限访问那么你让我怎么进行,,,好吧,这个我也没有深入研究底层,个人理解个人理解。层直接调用没有接口的service层,加了注解也一样不起作用吧,这个懒了,没有测试,其一是因为没有人会这么开发吧,其二是我就认为是不起作用的,哈哈。代码太长了,超过屏幕了,粘贴出来截的图,红框注释需要仔细看,希望不要影响你的阅读体验,至此,本篇关于。自己简单写了代码,有点粗糙,就不要介意啦,嘿嘿。...转载 2022-08-04 09:44:21 · 273 阅读 · 0 评论 -
Ip2region 离线IP地址定位库和IP定位数据管理框架
老板要我做一个 IP 属地功能!我摸索了 1 天,搞定了。♥️细心的朋友应该会发现,最近,继新浪微博之后,头条、腾讯、抖音、知乎、快手、小红书等各大平台陆陆续续都上线了“网络用户IP地址显示功能”,境外用户显示的是国家,国内的用户显示的省份,而且此项显示无法关闭,归属地强制显示。作为技术人,那!这个功能要怎么实现呢?1.HttpServletRequest 获取 IP下面,我就来讲讲,Java中是如何获取IP属地的,主要分为以下几步:通过 HttpServletRequest 对象,获取用户的。...转载 2022-08-04 09:42:00 · 7380 阅读 · 1 评论 -
7种 实现web实时消息推送的方案
推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备APP进行的主动消息推送。消息推送一般又分为web端消息推送和移动端消息推送。上边的这种属于移动端消息推送,web端消息推送常见的诸如站内信、未读邮件数量、监控报警数量等,应用的也非常广泛。...转载 2022-08-04 09:33:25 · 1088 阅读 · 0 评论 -
Spring Event 贼好用的业务解耦神器
实际业务开发过程中,业务逻辑可能非常复杂,核心业务 + N 个子业务。如果都放到一块儿去做,代码可能会很长,耦合度不断攀升,维护起来也麻烦,甚至头疼。还有一些业务场景不需要在一次请求中同步完成,比如邮件发送、短信发送等。Spring Event(Application Event)其实就是一个观察者设计模式,一个 Bean 处理完成任务后希望通知其它 Bean 或者说一个 Bean 想观察监听另一个Bean 的行为。有些业务场景不需要在一次请求中同步完成,比如邮件发送、短信发送等。...转载 2022-08-04 09:09:23 · 134 阅读 · 0 评论 -
Spring 自带的工具类
断 言1 断言是一个逻辑判断,用于检查不应该发生的情况2 Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启3 SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查//要求参数object必须为非空(NotNull),否则抛出异常,不予放行//参数 message 参数用于定制异常信息。voidnotNull(Objectobject,Stringmessage)//要求参数必须空(...转载 2022-03-02 15:31:37 · 406 阅读 · 0 评论 -
“ YYYY-MM-dd ”与““ yyyy-MM-dd ””的区别
publicclassDateTest{publicstaticvoidmain(String[]args){Calendarcalendar=Calendar.getInstance();calendar.set(2019,Calendar.AUGUST,31);DatestrDate=calendar.getTime();DateFormatformatUpperCase=newSimpleDateForm...转载 2022-03-02 15:28:15 · 378 阅读 · 0 评论 -
自定义注解实现业务校验
参数校验 业务规则校验 代码实战 自定义注解 实现业务校验规则 使用 测试 小结 在日常的接口开发中,为了保证接口的稳定安全,我们一般需要在接口逻辑中处理两种校验: 参数校验 业务规则校验 首先我们先看看参数校验。参数校验参数校验很好理解,比如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机号码格式是否准确。而实现参数校验也非常简单,我们只需要..转载 2022-03-01 13:28:25 · 375 阅读 · 0 评论 -
if-else=Map + 函数式接口
文章目录 需求 策略模式 Map+函数式接口 最后捋一捋本文讲了什么 需求最近写了一个服务:根据优惠券的类型resourceType和编码resourceId来 查询 发放方式grantType和领取规则。实现方式: 根据优惠券类型resourceType -> 确定查询哪个数据表 根据编码resourceId -> 到对应的数据表里边查询优惠券的派发方式grantType和领取规则 优惠券有多种类型,分别对应了不同的数据库表:转载 2022-02-28 16:25:15 · 192 阅读 · 0 评论 -
一键生成数据库文档,堪称数据库界的Swagger
1简介在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后人,于是萌生了要自己写一个插件工具的想法2特点 简洁、轻量、设计良好 多数据库支持 多种格式文档 灵活扩展 支持自定义模板 3数据库支持转载 2022-02-28 11:24:56 · 270 阅读 · 0 评论 -
分布式JVM监控工具,非常实用
介绍该项目为了方便开发者更快监控多个远程主机jvm,如果你的项目是Spring boot那么很方便集成,jar包引入即可,不是Spring boot也不用气馁,你可以快速自行初始化一个Spirng boot程序引入jar包即可效果展示整体架构git地址https://github.com/xk4848123/monitorhttps://github.com/xk4848123/monitor-server使用前提需要机器中有J转载 2022-02-25 16:38:02 · 149 阅读 · 0 评论 -
一键更改pom中jar包版本名称命令
versions:set -DnewVersion=0.0.3-SNAPSHOT原创 2022-02-15 15:06:04 · 1351 阅读 · 0 评论 -
Spring Boot 配置文件敏感信息加密
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开application.properties或application.yml,比如 MySql登陆密码,Redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。jasypt由一个国外大神写了一个springboot下的工具包,用来加密配置文件中的信息。GitHub Demo地址:https://github.com/jeiker转载 2022-01-27 17:00:46 · 112 阅读 · 0 评论 -
分布式接口幂等性、分布式限流(Guava 、nginx和lua限流)
限流转载 2022-01-04 09:43:50 · 211 阅读 · 0 评论 -
@Async异步发送短信
前言最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了。但是遇到了许多问题,使得@Async无效,也一直没有找到很好的文章去详细的说明@Async的正确及错误的使用方法及需要注意的地方,这里简单整理了一下遇见的问题,Sring是以配置文件的形式来开启@Async,而SpringBoot则是以注解的方式开启。我们可以使用springBoot默认的线程池,不过转载 2021-12-16 09:02:42 · 920 阅读 · 0 评论 -
Bean Searcher
对一个 Java 后端程序员来说,mybatis、hibernate、data-jdbc等都是我们常用的 ORM 框架。它们有时候很好用,比如简单的 CRUD,事务的支持都非常棒。但有时候用起来也非常繁琐,比如接下来我们要聊到的一个常见的开发需求,而对这类需求,本文会给出一个比直接使用这些 ORM 开发效率至少会提高100倍的方法(绝无夸张)。首先数据库有两张表用户表(user):(简单起见,假设只有 4 个字段)角色表(role):(简单起见,假设只有 2 个字段)接下来我们...转载 2021-11-11 09:34:57 · 5890 阅读 · 6 评论 -
Spring Boot 发送邮件功能
什么是 SMTP?SMTP 全称为 Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。什么是 IMAP?IMAP 全称为 Internet Message Access Protocol(互联网邮件访问协议),IMAP 允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP 与 POP 类似,都是一种转载 2021-11-01 09:11:11 · 754 阅读 · 0 评论 -
使用 StopWatch 优雅打印执行耗时
0x01:背景有时在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进一步控制,则需要在程序中很多地方修改,目前spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录工具示例先来看几个示例 统计输出总耗时 1importorg.springframework.util.St.转载 2021-10-29 10:43:59 · 132 阅读 · 0 评论 -
Java8 Stream流递归,几行代码搞定遍历树形结构
可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看,代码实现为了实现简单,就模拟查看数据库所有数据到List里面。实体类:Menu.java/***Menu*@authorlcry*/@Data@BuilderpublicclassMenu{/***id*/publicIn...转载 2021-10-21 15:50:58 · 232 阅读 · 0 评论 -
SpringBoot热部署环境配置与测试
什么是热部署?热部署,就是我们在项目正在运行的时候进行了项目改造升级(增加业务),却不需要重新启动项目。大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需 要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应 的各种信息,然后Class文件将被虚拟机的ClassLoader加载。而热部署正是利用了这个特点,它监听到如果有 Class 文件改动了,就会创建一个新的ClaassLoader 进行加载该文件...转载 2021-10-11 16:34:31 · 484 阅读 · 0 评论 -
一个注解搞定 SpringBoot 接口防刷
一,技术要点:springboot的基本知识,redis基本操作,首先是写一个注解类:importjava.lang.annotation.Retention;importjava.lang.annotation.Target;importstaticjava.lang.annotation.ElementType.METHOD;importstaticjava.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RUN...转载 2021-10-11 16:28:01 · 159 阅读 · 0 评论 -
@Valid使用
数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。最普通的做法就像下面这样。我们通过if/else语句对请求的每一个参数一一校验。这样的代码,小伙伴们在日常开发中一定不少见,很多开源项目都是这样对请求入参做校验的。但是,不太建议这样来写,这样的代码明显违背了单一职责原则。大量的非业务代码混杂在业务代码中,非常难以维护,还会导致业务层代码冗杂!实际上,我们...转载 2021-10-11 10:22:29 · 621 阅读 · 0 评论 -
Spring Boot 实现扫码登录
一、首先咱们需要一张表这表是干啥的呢?就是记录一下谁扫码了。谁登录了。User_Token表字段如下: uuid : 用于确保唯一性 userId :谁登录的 loginTime :登录时间 createTime :创建时间 用于判断是否过期 state:是否二维码失效 0有效 1失效 二、角色都有哪些咱们还需要分析一下子。扫码登录这个业务逻辑都有哪些角色 android端 or 微信Web端 :扫码 PC端 :被扫。登录转载 2021-10-11 09:39:30 · 212 阅读 · 1 评论 -
isEmpty 和 isBlank 的用法区别
isEmpty系列 StringUtils.isEmpty() StringUtils.isNotEmpty() StringUtils.isAnyEmpty() StringUtils.isNoneEmpty() isBank系列 StringUtils.isBlank() StringUtils.isNotBlank() StringUtils.isAnyBlank() ..转载 2021-10-09 15:08:18 · 169 阅读 · 0 评论 -
Spring Boot + EasyExcel 导入导出
一、EasyExcel 二、常用注解 三、依赖 四、监听 五、接口导入Excel 六、接口导出Excel 七、本地导入、本地导出 一、EasyExcelEasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要解决方式:通过解压文件的方式加载,一行一行的加载,并且抛弃样式字体等不重要的数据,降低内存的占用。EasyExcel..转载 2021-10-09 13:55:54 · 241 阅读 · 0 评论 -
详解 Lombok 中的 @Builder 用法!
Builder 使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程。基础使用@Builder注释为你的类生成相对略微复杂的构建器API。@Builder可以让你以下面显示的那样调用你的代码,来初始化你的实例对象:Student.builder().sno("001").sname("admin").sage(1...转载 2021-10-09 13:25:53 · 685 阅读 · 0 评论 -
怎么判断数组是否包含某个元素?
方法一、使用ListpublicstaticbooleanuseList(String[]arr,StringtargetValue){returnArrays.asList(arr).contains(targetValue);}方法二、使用SetpublicstaticbooleanuseSet(String[]arr,StringtargetValue){Set<String>set=newHashSe...转载 2021-08-31 15:38:30 · 3690 阅读 · 0 评论 -
tomcat启动很慢的解决方式
很多人肯定都用tomcat容器来启动项目,但可能有些时候启动时间特别长,甚至达到了几万毫秒至几十万毫秒,除去开发idea的问题和代码架构本身问题tomcat容器的优化问题,下面提供一种优化启动的方式。1.首先我们找到安装的jdk环境目录,打开$JAVA_PATH/jre/lib/security/java.security这个文件,我这里以jdk1.8为例然后打开java.securi...转载 2019-03-14 10:30:38 · 395 阅读 · 0 评论 -
eclipse的Hadoop插件安装
1、检查是否可以ping通 2、下载hadoop插件,注意:插件的版本要和用的hadoop版本保持一致 3、将插件jar包放在eclipse安装目录的plugins目录4、将hadoop安装包解压到指定的一个目录,统一是D盘根目录(后面要用这个安装目录)5、重启eclipse,windows=>下发现多出Map/Reduce选项卡,...原创 2019-03-14 11:18:51 · 359 阅读 · 0 评论 -
hadoop的常用指令
命令 说明1.执行:hadoop fs -mkdir /parkhadoop fs -mkdir -p /park在hdfs 的根目录下,创建 park目录2.执行:hadoop fs -ls / 查看hdfs根目录下有哪些目录3.执行:hadoop fs -put /root/1.txt /park 将linux操作系统root目录下的1.txt放在hdfs的park目录下...原创 2019-03-14 11:19:49 · 321 阅读 · 0 评论 -
Linux安装hadoop
1、安装jdk 上传并解压jdk2、配置环境变量 (1) vim /etc/profile (2) (3)source /etc/profile3、查看jdk版本 java -version4、上传并解压hadoop5、配置hadoop-env.sh 6、配置core-site.xml ...原创 2019-03-14 11:20:49 · 193 阅读 · 0 评论 -
yum安装MongoDB
yum安装MongoDBMongoDB是深受广大开源爱好者支持和研究的NoSQL数据库之一,它基于灵活的JSON文档方式,非常适合敏捷开发,其高可用功能强大,支持水平扩展等众多关键特性。一如其简约而不简单的MySQL一样,安装起来也非常方便,支持源码编译安装,rpm安装以及yum安装等众多方式。本文主要讲述在CentOS 7下yum方式快速安装MongoDB。一...转载 2019-03-14 11:25:11 · 445 阅读 · 0 评论 -
Linux下安装redis
注意:redis是在3.0后引入了集群命令: 1、创建目录:mkdir -p /usr/local/src/redis 2、进入目录:cd/usr/local/src/redis 3、下载redis包:wget http://download.redis.io/releases/redis-3.0.7....原创 2019-03-14 11:26:13 · 126 阅读 · 0 评论 -
MongoDB工具类
CommonMongoDaoimport java.util.List;import org.springframework.data.mongodb.core.query.Query;import org.springframework.data.mongodb.core.query.Update;/*** @author**/public int...转载 2019-03-14 11:29:28 · 560 阅读 · 0 评论 -
fastdfs上传封装
UploadResult/**上传结果封装*@author**/publicclassUploadResult {/** * 必选 状态码(ok= 200, error = 300, timeout = 301) */privateIntegerstatusCode=300;/...转载 2019-03-14 11:43:08 · 229 阅读 · 0 评论 -
Linux中的fastDFS安装
FastDFS安装步骤1.解压libfastcommon-masterunzip libfastcommon-master.zip2.安装libfastcommon-mastercd libfastcommon-master./make.sh./make.sh install看到类似如下提示信息就说明libfastcommon已安装成功...转载 2019-03-14 11:47:19 · 872 阅读 · 0 评论 -
Linux安装配置SVN
安装使用yum安装非常简单:yum install subversion配置创建仓库我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成功后在svn下面多了几个文件夹。[root@localhost /]# cd /home[root@localhost home]# mkdir svn[root@localh...转载 2019-03-14 11:48:54 · 191 阅读 · 0 评论 -
linux 部分命令
1、列出分区表状况fdisk -l2、显示磁盘的相关信息df(disk free) -h3、显示分区情况parted -l4、添加用户useradd -g主组 -G附加组 -s 登录的shell -d用户目录 -u 用户自定义id 用户名设置密码: passwd 用户名解锁: passwd -u 用户名5、修改用户...原创 2019-04-02 17:26:03 · 97 阅读 · 0 评论 -
word转PDF之Linux下安装openoffice4.1.6
一、安装openoffice1、去http://www.openoffice.org/zh-cn/download/下载,目前是4.1.6版本2、将tar包上传到Linux服务器下某目录3、执行 tar -xzvfApache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz4、进入到zh-CN下的RMPS目录:c...原创 2019-09-09 11:24:33 · 812 阅读 · 0 评论 -
word转PDF之springboot集成openoffice
1、pom文件<!-- openoffice word转pdf --><dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>2.2.2</ver...原创 2019-09-09 11:44:19 · 1399 阅读 · 0 评论