自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(218)
  • 资源 (11)
  • 收藏
  • 关注

原创 Java异步调用接口实现方式

使用异步技术在大多情况下能够提升性能,而且会很显著,但不是盲目地使用多线程就能提高性能了。要合理考虑多个线程之间的协助,避免线程挂起阻塞太久,额外开启线程的性能开销不可忽视。可以在开启子线程的同时,主线程继续执行其它的操作,执行完成之后再判断子线程是否完成。如果想使用多线程提高系统的tps,一定要分析瓶颈所在之处。比如文中举的案例,如果瓶颈在接口响应的时间上,把调用A接口和调用B接口异步处理,并不能提升整体的性能,只能改进整体的响应时间。

2023-12-20 11:34:25 1109

原创 maven项目可以运行但是打包后执行报错

导入maven插件工具shade即可解决该问题,在开发工具中,下面的goals -> goal中的shade会变红色,我也不知道为什么,但是我可以很确定告诉你,就是这么配置的。根据上面的报错原因,是找不到我导入的maven的依赖,我很确定我在dependencies中是有导入了的,不然我开发的时候怎么执行的呢。真的除了我代码中的文件,maven依赖的包它是一个都没给我放进去,难怪会找不到文件呢。也可以,不过这个通常会在线上拉包,我个人不太喜欢,不过也给出示范了。是要共存的,否则会无法打包。

2023-12-18 16:07:19 328

原创 打印content-type为mutipart/form-data的请求参数日志

也能理解的,毕竟这个本身只是用来文件上传的,存在其它参数也需要读取出来,就不太容易。如果是在HttpServletRequest中读取个请求参数,那是相当easy,可这不是servlet,拿到的只是HttpRequest,请求参数没办法从HttpRequest中读取。我们可以注意到,输出的报文的字段,会通过content-type的boundary进行分割。在一个项目里,需要对RestTemplate请求打印日志,包括请求报文、请求参数等内容。类型的请求报文,打印日志的时候,格式非常奇怪。

2023-12-04 16:03:06 204 1

原创 非spring管理的容器获取application.yml中的配置

如果能在运行时获得spring的上下文,或者直接拿到Environment对象,就能获得所需的配置。可是在不归spring容器管理的类,是没有办法直接获取到spring的上下文。只能采取间接手段,通过一个归spring管理的容器的static方法获得spring的上下文。在一个旧项目里,有一个类不归spring容器管理的,引用方式就是到处new,现在需要给这个类加一个可配置的属性。配置是在apollo上的,没办法根据文件名读取文件。

2023-12-04 15:32:23 267

原创 Oracle BITAND函数妙用解决方案

当使用位掩码时,我们将多个开关状态或选项用二进制位表示,每个开关对应一个二进制位,通常是0或1。通过将不同开关的二进制位组合在一起,我们可以用一个整数(通常是一个二进制数)来表示多个开关状态的组合。通过将平台的权值设置为2的幂次方值,并使用按位或运算将这些权值组合在一起,您可以有效地表示多个平台的选中状态,并将其存储为一个整数字段。如果勾选了 管理员 和 普通用户,保存的结果值为3( 1 + 2 = 3),同理可配对任意的组合,每种组合的和值都会是唯一的。1、2^2 等),这是位掩码的常见用法。

2023-08-02 11:12:34 257

原创 linux批量删除指定文件名的文件

前段时间设计的图片上传系统,考虑到它的容灾性,在删除图片时,并不会对文件进行真正的删除操作,只会在数据库对其进行逻辑删除。这样的设计带来的严重缺陷是后续运维的困难,随着系统上线的时间越来越长,冗余堆积文件越来越多,对磁盘、数据库都存在一定的压力。设计系统时应当考虑到后续的运维需求,在删除的时候记录删除的时间,在删选逻辑删除的文件时查找删除已久的文件,以免影响灾备。如查找逻辑删除2个月前的图片。对于这个问题,只能考虑。

2023-06-15 18:26:47 991

原创 Java list安全删除元素详解

分析了一下ArrayList的源码,原来增强for循环的实现原理是使用了Iterator迭代器,而ArrayList重写了迭代器的next方法,每次迭代时会检查是否做了新增或者删除操作(modCount++),而这些操作都会导致期待值与实际值不对等,从而抛出异常。我不理解什么是安全删除,我开发的业务中也很少说需要用到remove的,我只记得一般用的话,都是remove(index)这样。其实原理很简单,就是因为List.remove删除元素后,数组的整体下标会往前移动,原本的位置被遍历过了,就会被跳过。

2023-06-14 14:57:40 3118

原创 Oracle中实现类似于Mysql中的Field()函数功能

如果是’Mark’,则为3。如果name列的值不在给定的值列表中,则position列的值将为0。在上述示例中,DECODE()函数用于将特定的值映射为排序指标,将’John’映射为1,'Jane’映射为2,'Mark’映射为3,其他值映射为4。需要注意的是,与MySQL的FIELD()函数不同,Oracle的DECODE()函数是逐个比较每个值,并返回相应的结果,而不是返回位置索引。需要注意的是,FIELD()函数返回的是一个排序指标,它可以在ORDER BY子句中使用,但不会在结果集中返回一个新的列。

2023-06-05 19:20:37 1247

原创 MybatisPlus配置分页插件

从3.4版本开始,分页插件推荐用PaginationInnerInterceptor。

2023-05-16 09:57:55 269

原创 控制日志完整报文的输出频率

在实际的生产开发中,记录日志是非常重要的一步。记录日志的主要原因是方便排查和分析问题。当软件出现异常、运行缓慢或数据错误时,日志记录可以提供大量有价值的信息,帮助开发人员快速定位问题的原因和位置,并加速问题的修复过程。但是记录日志不是越详细越好,不是内容越多越优质。日志输出到文件中会占有大量的IO性能,拖慢程序吞吐量,加快服务器硬盘消耗,内容过多也对我们查找日志带来了难度。针对日志对性能的消耗问题,我们首先考虑的是异步日志,这确实效果显著。

2023-04-27 16:35:23 199

原创 SpringBoot项目防重复提交注解开发

在实际开发过程中,防重复提交的操作很常见。有细分配置针对某一些路径进行拦截,也有基于注解去实现的指定方法拦截的。实现防重复提交,我们很容易想到就是用过滤器或者拦截器来实现。使用拦截器就是继承类,实现方法;使用过滤器就是实现接口,在完成对应的防重复提交操作。使用过滤器的话,会对所有的请求都进行防重复提交。但对于一些查询接口来说,并不需要防重复提交。那么怎样在指定的接口需要使用防重复提交拦截呢?答案就是用注解。2.实现防重复提交方法一:基于过滤器与session但其实这个方案还需要考虑一个场景:如果设置

2023-04-20 10:33:51 1015 1

原创 IDEA设置全局maven

关闭当前打开的项目,打开设置,改变maven setting文件,保存即可。

2023-04-17 16:09:22 1188

原创 Java Web 实验九 JDBC数据库访问二

>BaseServlet.java 继承HttpServlet,重写Servlet方法,用于实现Servlet方法的调用,不局限于doPost,doGet方法。->JDBCBookDaoImpl.java 针对数据库接口的实现。->DaoFactory.java 工厂类,用于生产数据对象。->JDBCUtil01.java 数据库连接工具类。->BookService.java 实现查询功能。->list.jsp 用于显示书本清单,可选择查询。->BookDao.java 数据库接口。

2023-03-29 18:09:40 264

原创 Java Web 实验八 JDBC数据库访问一

纯Java驱动,并在JSP中调用,能够浏览表中所有记录。:调用javaBean中的类进行数据库连接,并显示页面。:用于实现对数据库的连接封装类。

2023-03-29 17:52:45 103

原创 类型擦除及其解决方案 TypeToken 或TypeReference

为了解决这个问题,我们可以使用一些框架提供的解决方案,例如Gson库中的TypeToken和fastjson库中的TypeReference。这两个类的作用是通过构造一个包含泛型类型信息的对象来绕过类型擦除的限制,从而使我们能够在反序列化时获取到实际的泛型类型信息。这种类型擦除的机制导致在反序列化时,我们无法获取实际的泛型类型信息,而只能得到原始类型,这就是类型擦除所带来的问题。当我们使用Java的泛型时,编译器会在编译时执行类型擦除。有小伙伴可能就要说了,什么类型擦除啊,我照接收不误。

2023-03-23 18:37:37 638

原创 Long.parseLong()和Long.valueOf()的区别

此外,如果字符串无法转换为long类型,Long.valueOf()会抛出NumberFormatException异常,而Long.parseLong()会返回0。因此,如果你需要一个Long对象,你应该使用Long.valueOf(),如果你需要一个long类型的原始值,你应该使用Long.parseLong()。在Java中,Long.valueOf()和Long.parseLong()都可以将字符串转换为long类型。但是,它们之间有一些区别。对象,而Long.parseLong()返回一个。

2023-03-23 10:39:09 1099 1

原创 spring-boot-starter-actuator访问/actuator/info报404错误

需要加上如下配置management : endpoints : web : exposure : include : health , info # 可以用【*】来表示开放所有的监控 info : defaults : enabled : true # info信息补充 info : app : name : test description : this is a demo。

2023-03-22 18:19:43 3002

原创 Oracle报错:ORA-01439:要更改数据类型,则要修改的列必须为空

原本设置的一个varchar2类型字段长度不够,现在想扩展一下,执行下面语句报错。ORA-01439:要更改数据类型,则要修改的列必须为空。列已经存在了字符内容,无法直接对其进行扩容操作。注意:该操作会删除字段!操作前请做好数据备份!

2023-03-21 09:50:11 686

原创 实验一 Java Web 入门

2、熟悉Tomcat服务器的目录,学习如何设置Web服务目录。并在其目录下运行一个简单的JSP页面;1、了解并学会配置MyEclipse集成开发环境,学会在其环境下创建工程并发布运行一个JSP程序;3、熟悉和掌握HTML中表单的设计和提交。

2023-03-16 16:28:13 910

原创 oracle中对JSON数据处理

在公司接手的项目碰到这么一个表,里面有一列数据保存的是JSON字符串。如果说这一列是一些配置数据,不需要应用到筛选和过滤,只是跟着主键去获得的数据,那你这么做并没有什么不妥。但事实是,这一列需要检索和过滤数据,这**居然是遍历全表,再把json数据转换成对象去遍历匹配。我服了,你咋这么能呢?喜欢这样玩为什么当初不用MongoDB?

2023-03-13 17:17:05 12570 4

原创 springboot实现Hessian协议的RPC服务

我思考了很久,到底是怎样可以做到只用接口就实现功能了,首先想到的是mybatis的mapper类型接口,但是这种人家有@Mapper注解,能用切面之类的。在上面的配置中,使用@Bean注解将HessianServiceExporter实例化为Spring Bean,并使用/setService()和/setServiceInterface()方法将UserService实现类暴露为Hessian服务端。创建一个UserService的实现类,并在其中实现getUserById()方法。

2023-03-09 18:14:24 616 3

原创 基于quartz实现定时任务管理系统

说起定时任务框架,首先想到的是Quartz。这是定时任务的老牌框架了,它的优缺点都很明显。借助PowerJob 的readme文档的内容简单带过一下这部分。除了上面提到,还有quartzui也是相当火热的,可以自行了解一下。那么都这么多后起之秀,个个吊打quartz,为什么我还选择用quartz来做定时任务?技术是服务于业务的,肯定是有需求呗。公司有个统一管理平台,现在需要开发一个定时任务管理平台,可以动态去管理配置定时任务、查看运行日志。为什么不考虑其它的框架?

2023-03-06 14:15:12 2464

原创 操作留痕功能实现与探讨

到此该操作留痕功能基本已经实现完成,有些地方还需要继续优化和规范化。比如使用枚举、常量去规范一些Hard Code。回到上面的问题,这种通过调用接口去实现操作留痕的方案,适用于对后端业务无法切入的情况。比如你开发的是一款具备身份权限校验等功能的快速框架,别人通过调用你的jar包即可改造自己已有的系统。为了方便别人的开发,不对已有代码进行过多的改造,那就只能通过这种调接口的方式实现操作留痕。前端基于axios的拦截器,对发起的请求进行拦截,将操作记录信息通过接口调用的方式保存。

2023-03-01 18:14:50 1080

原创 SpringBoot项目启动成功后打印Banner

可能有些同学看到就觉得,这个都要发文章?这不是整个banner.txt再配置一下就行了吗?还真不是,这个是在项目启动时,先打印的banner,你仔细回想是不是,一启动控制台就打印一个《spring》,我帮你回忆一下而我这里说的是,项目启动成功之后,再打印banner如果你想问,为啥要放在启动后?启动前不行吗?问就是**规定。

2023-02-28 10:53:54 2992

原创 修复路径穿越、任意文件写入漏洞

前段时间随手写的一个文件上传服务,在公司的渗透测试下漏洞百出,其中少不了路径穿越和任意文件写入漏洞。其实这两个漏洞的修复并不复杂,只要对入参进行两个条件的校验就可以了。

2023-02-23 11:21:35 6119 4

原创 mysql中exists巧用与在oracle中的实现方式

他的思路无非就是想新建一列status,这个status在当TABLE_B中有结果时显示1,无结果时显示0。来表示子查询的结果。我在这里选择了case语句,正好符合我的预期,当有结果显示1,无结果显示0。因此,如果要在 Oracle 数据库中运行这个查询,需要将语句中的双引号去掉,改成使用单引号来表示别名。于是我基于子查询有结果返回1,无结果返回0的原理,造了一个联合查询。子查询的结果集是否为空来判断的,如果子查询返回的结果集为空,那么。因此,我们要写出一个效果差不多的连接查询,又不用联合两个结果的语句。

2023-02-22 12:02:26 546

原创 logback-spring.xml配置打印错误日志

这部分的内容基本上是固定的,除了pattern可能有些许差异,基本上是一次编写,多处cv。将错误日志单独提到一个文件中这个操作在实际开发中非常常见且必要,只需要加多一个。

2023-02-20 15:13:59 1146

原创 基于策略模式企业实战中策略命中设计

基于策略模式设计的策略命中设计,主要难点是策略模式的框架设计理念与策略值对比。

2023-02-16 10:31:01 356

原创 Java后台实现拖拽树状控件排序的数据持久化操作

很久没练习过数据结构了,重新整理学习了一下,这只是一个大概的方案,可优化的地方很多,比如对归档的节点(已找完树结构的节点)做一个移除操作,能大幅度提升程序处理的速度,可考虑使用链表来实现。具体的细节可根据业务场景补充。

2023-02-09 16:55:29 1748 12

原创 OpenFeign报Read timed out异常

这是由于OpenFeign集成的Ribbon默认设置的超时时间为1秒。我们可以通过修改超时时间来避免出现这个异常。项目使用了openFeign作为微服务调用方式,使用过程中由于一个接口响应较慢,出现了。

2022-12-28 17:45:39 1293

原创 Spring Boot请求报文日志打印

在实际生产维护中,程序出错了,有时我们需要分析请求报文是否有问题,这时候就需要对请求报文进行日志打印。

2022-12-27 16:10:32 1280 2

原创 Spring Boot响应结果返回拦截

响应结果返回之前拦截在开发维护时比较常用,如打印响应报文日志、规范统一返回报文格式等需求。实现并不难,springMVC为我们提供了一个很好用的接口。,我们只要实现这个接口即可。

2022-12-27 15:34:50 2751

原创 Spring Boot 统一异常处理类设计

比如说数据库报错了,空指针了,传参错误了等等一系列的异常问题,如果我们不做统一异常处理,当前的线程会不做任何的响应返回操作。有人说,那你前端不会做兜底咩,前端没返回结果你做个统一处理就好了啊。前端做兜底是不够的,因为这时候你根本不知道是服务器错误,还是前端请求后端网络链路通信异常。而正常来说,是服务器报错的话,该提示的信息是【服务器繁忙】、【系统异常】。2个注解,ResponseEntity是一个返回结果对象,看你自己项目怎么封装的就好,最基本的至少要有code和data两个属性。

2022-12-27 14:36:51 188

原创 抽象类中有一个空实现方法A,部分子类重写方法A,抽象类B调用方法A会发生什么

在看别人写过的代码的时候,发现了一个很有意思的设计。学艺不精一时之间不知道这代码是怎么调用的,做了一个简单的代码模型分析了一下,感觉比较有意思,就分享一下。子类Son1继承Father类,并重写了AFunc()其中,otherFunc()中调用了父类的BFunc()方法子类Son2继承Father类,不重写AFunc()其中,otherFunc()中调用了父类的BFunc()方法这是基于我所接触的代码中的一个简化模型,项目中原本是有几十个子类实现了AFunc()与几十个不实现AFunc

2022-12-26 11:07:09 159

原创 eureka自我保护机制配置关闭

eureka的自我保护机制指的是,当网络发生问题导致服务访问失败时,eureka注册中心不会马上把应用剔除,继续保留一段时间。但这样对我们实际开发来说,需要频繁重启应用的时候,不方便测试,需要将自我保护机制关闭。在原有的配置上,添加如下配置2. 修改eureka客户端在原有的配置上,添加如下配置配置完成之后,经测试可体验到在服务关闭后非常快速地剔除应用。

2022-12-06 17:05:50 658

原创 Eureka 服务端搭建入门与集群搭建

Eureka在2022年已经确定的是,2.x版本开源计划已经停止了,1.x版本陆陆续续还是有人在维护的。还有很多最早使用微服务的公司还在继续用着eureka作为注册中心,也是很多同学学习微服务的敲门砖。创建一个平平无奇的maven工程,取名为eureka-server创建好maven工程之后,导入spring-boot与spring-cloud依赖版本管理依赖,注意两者的版本对应关系,或者你直接用我的版本。2. 编写application.yml文件3. 编写启动类很正常的一个启动类,只是添加了标签

2022-12-06 16:20:36 1809 1

原创 IDEA 2021.1.2版本隐藏.idea与.iml文件

平时开发过程中,我们不会改动到idea里的与文件,想把它隐藏起来。

2022-12-05 11:46:15 319

原创 spring整合redis中withCacheConfiguration属性报红

是要求在spring-data-redis依赖在2.2版本以上才有的,这一看,我的项目的spring-data-redis是2.1.3,肯定是不符合的。项目一直使用spring-boot-starter-redis的依赖,最近对杂乱的pom文件进行整理,不整理还没事,一整理就出事了,一直编译不通过,导入2.2版本以上的spring-data-redis进行覆盖。查看RedisCacheManager的源码,发现这个。

2022-11-29 18:02:27 426

原创 Redis String类型使用方法

不管是哪种格式,底层都是字节数形式存储,只不过是编码方式不同。SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行。如同这样的存储形式,其中name是普通字符串,age是整数,score是浮点数。String 类型,也就是字符串类型,是Redis中最简单的存储类型。INCR:increase的缩写,让一个整数的key自增1。SETEX:添加一个String类型的键值对,并指定有效期。INCRBY:让一个整数的key自增并指定步长,负数也行。DECR:让一个整数的key自减1。

2022-11-25 11:33:45 1111

原创 Redis 通用命令

EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除,单位是秒。DEL:删除一个指定的key,删除成功返回1,失败返回nil。EXISTS:判断key是否存在,存在则会返回。为到期失效,正常数字为剩余存活时间,单位是秒。KEYS:产看符合模板的所有key,TTL:查看一个KEY的剩余有效期,不建议在生产环境设备上使用。

2022-11-25 10:33:47 277

springboot-hello.rar

springboot的入门学习程序,用于了解springboot的开发步骤

2021-05-25

bookstore.rar

springboot整合ssm的入门项目,主要是熟悉springboot的开发逻辑步骤

2021-05-17

springMVCTest.rar

这是一个SpringMVC的入门程序。

2021-05-14

spring-aop.rar(资源免积分/C币)

用注解的方式完成的一个spring aop的小实验,欢迎大家学习交流

2021-04-28

spring-aop-xml.rar(资源免积分/C币)

spring-aop用xml方式完成的一个小实验

2021-04-28

实验四增强版(spring+mybatis)SpringIoC小程序.rar

这是一个使用spring+mybatis整合框架的小应用程序,欢迎下载学习交流~

2021-04-15

实验四_SpringIoC.rar

实验四:完成一个练习Spring框架IoC基本适用的小程序

2021-04-13

文学研究助手.cpp(公益事业,不需要积分/C币,100%原创)

文学研究助手 【问题描述】 文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为"文学研究助手"。

2021-04-06

mybatisTest_anno.rar

实验三 mybatis注解方式实现增删改查 tips:资源不需要积分与C币,公益事业

2021-04-01

长整数运算完整代码.rar(不需要积分,公益事业)

长整数的代数计算 【问题描述】 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 【基本要求】 (1) 长整数长度在一百位以上。 (2) 实现两长整数的加、减、乘、除操作。 (3) 输入输出均在文件中。 (4) 分析算法的时空复杂性

2021-03-27

免安装版MySQL缺少的my.ini

免安装版需要用的my.ini,不需要积分下载,纯公益事业

2021-03-27

MySQL-8.0.22-winx64(2021.1.15)版本

官方下载太慢了,给大家分享一下,第一次上传文件,资源是免费免积分的

2021-01-15

空空如也

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

TA关注的人

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