ssm
文章平均质量分 87
一枚务实的码农
IT码农一枚,分享一些自用的学习资料。
展开
-
Spring6的新特性,正式“抛弃”feign了
上文中创建工程的时候,引入了 Spring Reactive Web 的依赖,在创建代理的service对象的时候,使用了其中的 WebClient 类型。只是,我们的一些思维还未转变过来,对 feign 的底层实现也缺乏一定的了解。除了上述例子中的简单使用之外,添加了 HttpExchange 的方法还支持各种类型的参数,这一点也与 Spring MVC 的 Controller 方法类似,方法的返回值也可以是任意自定义的实体类型(就像上面的例子一样),此外,还支持自定义的异常处理。原创 2023-03-13 20:17:57 · 1300 阅读 · 0 评论 -
MyBatis里面用了多少种设计模式?
在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。经过整理,大概有以下设计模式,如图1所示。图101类型:创建型模式。原创 2023-03-11 13:40:19 · 277 阅读 · 0 评论 -
SpringBoot+WebSocket实时监控异常
最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。前端略微复杂,需要在一张位置分布图上进行鼠标描点定位各个设备和根据不同屏幕大小渲染,本文不做介绍,只是简单地用页面样式进行效果呈现。预期效果,未接收到请求前----->id为3的提交了异常,id为3的王五变成了红色。我们可以看到,id为3的王五状态已经变成异常的了,实时通讯成功。2、因为是模拟数据,所以全部显示正常,没有异常提交时的页面呈现。绿色代表正常,红色代表异常。原创 2023-03-10 23:37:47 · 3657 阅读 · 1 评论 -
SpringBoot 如何保证接口安全?
因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。这种方案nonce和timestamp参数都作为签名的一部分传到后端,基于timestamp方案可以让黑客只能在60s内进行重放攻击,加上nonce随机数以后可以保证接口只能被调用一次,可以很好的解决重放攻击问题。步骤2:服务端接收到客户端的请求,然后使用约定好的秘钥对请求的参数再次进行签名,得到签名值sign2。原创 2023-03-07 22:25:02 · 1869 阅读 · 0 评论 -
SpringBoot集成ElasticSearch,实现模糊查询,批量CRUD,排序,分页,高亮
导入elasticsearch依赖非常重要:检查依赖版本是否与你当前所用的版本是否一致,如果不一致,会连接失败!!!!!!!!# 创建高级客户端基本用法1.创建、判断存在、删除索引2.对文档的CRUD创建文档:注意:如果添加时不指定文档ID,他就会随机生成一个ID,ID唯一。创建文档时若该ID已存在,发送创建文档请求后会更新文档中的数据。更新文档数据:注意:需要将User对象中的属性全部指定值,不然会被设置为空,如User只设置了名称,那么只有名称会被修改成功,其他会被修改为null。原创 2023-03-03 17:55:29 · 1290 阅读 · 0 评论 -
推荐一款基于 SpringBoot + Vue 的前后端分离实战项目!技术主流,文档很全!
如果你不知道如何搭建 Node 开发环境的话,Windows 用户可以看 Microsoft 的**《直接在 Windows 上设置 Node.js 开发环境》**[2]这篇文章,介绍的非常详细。项目的前端基于 Vue 全家桶+Element(桌面组件库)+Avue(采用 Element 框架低代码前端框架,它使用 JSON 配置来生成页面,可以减少页面开发工作量,极大提升效率)。不过,这一步需要你的本地有 Node 开发环境。当然了,如果你想本地搭建环境来学习或者体验这个项目的话,也是比较简单的。原创 2023-03-02 18:01:57 · 1161 阅读 · 0 评论 -
Spring中最常用的11个扩展点
其实,我们经常使用的注解,比如:@Autowired、@Value、@Resource、@PostConstruct等,是通过AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor实现的。假如:接口中接收参数的实体对象中,有个字段的类型是Date,但是实际传参的是字符串类型:2021-01-03 10:20:15,要如何处理呢?比如,我们想在同一个线程中从spring容器获取到的bean都是同一个对象,该怎么办?原创 2023-02-28 16:36:12 · 2364 阅读 · 0 评论 -
spring容器,@Bean 与 @Component 用在同一个类上,会怎么样?
验证方式有很多,可以 debug 跟源码,看看 Spring 容器中到底有几个 UserManager 对象,也可以直接从 UserManager 构造方法下手,看看哪几个构造方法被调用,等等。没有显示的指定值,那么默认值就是 false ,之后在 Spring Boot 启动过程中,会用此值覆盖掉 Spring 中的。覆盖的,变的是 Spring Boot , Spring Boot 2.1.0 之前没有覆盖 Spring 的。创建的 userName 不为 null 的 UserManager 对象。原创 2023-02-28 16:27:02 · 241 阅读 · 0 评论 -
SpringBoot 整合 SpringMvc 流程以及原理
BeanPostProcessor :是Spring容器的回调接口,在所有Bean初始化之前和之后分别回调此接口的postProcessBeforeInitialization,postProcessAfterInitialization方法。实现ImportBeanDefinitionRegistrar接口,实现注入需要的Bean到Spring容器中,Mybatis(MapperScannerRegistrar)也是通过此接口来完成Mapper类的定义。这样,只需要根据自身需求,设置配置文件。原创 2023-02-27 17:29:40 · 1026 阅读 · 0 评论 -
SpringBoot + MDC 实现全链路调用日志跟踪
重新返回的是包装后的 Runnable,在该任务执行之前 runnable.run() 先将主线程的 Map 设置到当前线程中(即 MDC.setContextMap(context)),这样子线程和主线程 MDC 对应的 Map 就是一样的了。设置 MDC 中的 traceId 值,不存在则新生成,针对不是子线程的情况,如果是子线程,MDC 中 traceId 不为 null;如果调用线程中含有 traceId,则需要将获取到的 traceId 通过 request 中的 header 向下透传下去。原创 2023-02-24 16:21:00 · 828 阅读 · 0 评论 -
Spring 用到了哪些设计模式
这里我们声明一个了一个工厂方法getPrizeSender(),其入参就是SendPrizeRequest,而返回值是某个实现了PrizeSender接口的实例,可以看到,通过这种方式,我们将具体的选择方式下移到了具体的子类中的,因为当前实现了PrizeSender的bean是否支持当前request的处理,是由具体的子类实现的。可以看到,工厂方法将具体实例的选择进行了封装,而客户端,也就是我们的调用方只需要调用工厂的具体方法获取到具体的事例即可,而不需要管具体的实例实现是什么。原创 2023-02-22 16:35:28 · 470 阅读 · 0 评论 -
Spring Boot整合RabbitMQ教程
虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回.由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。zeroMq不支持,activeMq和rabbitMq都支持。(2)并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间。原创 2023-02-22 16:30:08 · 541 阅读 · 0 评论 -
MyBatis-Plus详细讲解(整合spring Boot)
Piwigo相册,可以分享生活、记录漫漫人生路中的美好时光和感动,希望这个可以陪伴你的美好回忆。强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库。原创 2023-02-20 15:33:51 · 2447 阅读 · 0 评论 -
Spring Boot + Redis 实现分布式锁
例如,线程 A 先获取锁,proceed 方法耗时,超过了锁超时时间,到期释放了锁,这时另一个线程 B 成功获取 Redis 锁,两个线程同时对同一批数据进行操作,导致数据不准确。使用 Redis 作为分布式锁,将锁的状态放到 Redis 统一维护,解决集群中单机 JVM 信息不互通的问题,规定操作顺序,保护用户的数据正确。有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。所以记得多打点 Log,分析问题时可以更快一点。原创 2023-02-19 10:46:30 · 1172 阅读 · 0 评论 -
基于easyexcel的MySQL百万级别数据的excel导出功能
重写了POI对07版Excel的解析,之前一个3M的excel用POI sax解析,需要100M左右内存,如果改用easyexcel可以降低到几M,并且再大的Excel也不会出现内存溢出;需要注意的是:如果用job的话,要避免重复执行的情况。用户拿到这个百万级别的excel文件,到底有什么用途,在他们的电脑上能否打开该excel文件,电脑是否会出现太大的卡顿了,导致文件使用不了。,增加更多的查询条件,用户通过修改查询条件,多次导数据,可以实现将所有数据都导出的功能,这样可能更合理一些。原创 2023-02-17 18:05:16 · 1164 阅读 · 1 评论 -
spring中@Autowire和@Resource的区别在哪里?
基于字段的依赖注入方式,你在程序启动的时候无法拿到这个类,只有在真正的业务使用的时候才会拿到,一般情况下,这个注入的都是非null的,万一要是null怎么办,在业务处理的时候错误才爆出来,时间有点晚了,如果在启动的时候就暴露出来,那么bug就可以很快得到修复(当然你可以加注解校验).Spring的IOC对待属性的注入使用的是set形式,但是final类型的变量在调用class的构造函数的这个过程当中就得初始化完成,这个是基于字段的依赖注入做不到的地方.只能使用基于构造函数的依赖注入的方式。原创 2023-02-14 17:15:59 · 1925 阅读 · 2 评论 -
一款基于java的超级棒的开源支付系统(用来毕设也不错),国内首款开源的互联网支付系统
最近年初刚开始了,小编想着应该会有很多公司开始冲一波今年的业绩,既然是冲业绩,就离不开我们的支付系统,所以小编就去网上给大家找到了一款超级棒的开源支付系统!它是国内首款开源的互联网支付系统,拥有独立的账户体系、用户体系、支付接入体系、支付交易体系、对账清结算体系。拥有支付系统通用的支付通道接入、用户管理、资金账户管理、对账清算管理、支付订单管理等功能;已接通支付宝支付和微信支付的多种支付方式,满足大部分企业业务系统的支付需求;配套完善的系统使用文档、部署文档、视频教程,学习使用更轻松;原创 2023-02-13 18:29:40 · 1141 阅读 · 0 评论 -
Spring项目中用了这种解耦模式,老大对我刮目相看
不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用 CSV解析器或者JSON解析器,在调用的客户端一般都是用if else去做判断,比如类型等于JSON,我就用JSON解析器,那如果新加一个类型的解析器,是不是调用的客户端还要修改呢?这显然太耦合了,本文就介绍一种方法,服务定位模式Service Locator Pattern来解决,它帮助我们消除紧耦合实现及其依赖性,并提出将服务与其具体类解耦。原创 2023-02-12 20:07:52 · 478 阅读 · 0 评论 -
springboot 3 下连接 mysql 数据库以及整合 mybatis-plus
springboot 3版本整合 mybatis 3.0.5版本控制台报错 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required,NestedIOException 这个类在 Spring 6 版本中直接删除了。对的,直接删除了。而 MyBatis 老版本还没有同步更新,所以直接就报红了。而整合 mybatis 的 mybatis-plus 自然也会报红。原创 2023-02-08 18:03:00 · 3028 阅读 · 2 评论 -
到底什么样的 REST 才是最佳 REST?
说起 REST API,小伙伴们多多少少都有听说过,但是如果让你详细介绍一下什么是 REST,估计会有很多人讲不出来,或者只讲出来其中一部分。今天松哥就来和大家一起来聊一聊到底什么是 REST,顺便再来看下 Spring HATEOAS 的用法。原创 2023-02-07 20:29:24 · 66 阅读 · 0 评论 -
SpringBoot 如何保证接口安全?老鸟们都是这么玩的!
因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。这种方案nonce和timestamp参数都作为签名的一部分传到后端,基于timestamp方案可以让黑客只能在60s内进行重放攻击,加上nonce随机数以后可以保证接口只能被调用一次,可以很好的解决重放攻击问题。步骤2:服务端接收到客户端的请求,然后使用约定好的秘钥对请求的参数再次进行签名,得到签名值sign2。原创 2023-02-07 20:26:15 · 534 阅读 · 0 评论 -
MyBatis 中为什么不建议使用 where 1=1?
在 MyBatis 中,建议尽量避免使用无意义的 SQL 拼接 where 1=1,我们可以使用 标签来替代 where 1=1,这样的写既简洁又优雅,何乐而不为呢?以上内容仅为个人观点,欢迎评论区留言讨论。原创 2023-02-02 20:04:30 · 119 阅读 · 0 评论 -
使用MyBatis拦截器后,摸鱼时间又长了。
MyBatis的拦截器顾名思义,就是对某些操作进行拦截。通过拦截器可以对某些方法执行前后进行拦截,添加一些处理逻辑。MyBatis的拦截器可以对Executor、StatementHandler、PameterHandler和ResultSetHandler 接口进行拦截,也就是说会对这4种对象进行代理。拦截器设计的初衷就是为了让用户在MyBatis的处理流程中不必去修改MyBatis的源码,能够以插件的方式集成到整个执行流程中。原创 2023-02-02 20:03:10 · 155 阅读 · 0 评论 -
说一下 Spring 中 Bean 的生命周期?
Bean 的生命周期指的是 Bean 在 Spring(IoC)中从创建到销毁的整个过程。Bean 的生命周期主要包含以下 5 个流程:1.实例化:为 Bean 分配内存空间;2.设置属性:将当前类依赖的 Bean 属性,进行注入和装配;3.初始化:执行各种通知;执行初始化的前置方法;执行初始化方法;执行初始化的后置方法。4.使用 Bean:在程序中使用 Bean 对象;5.销毁 Bean:将 Bean 对象进行销毁操作。原创 2023-02-01 15:51:20 · 79 阅读 · 0 评论 -
Spring 解决循环依赖必须要三级缓存吗?
我们都知道 Spring 是通过三级缓存来解决循环依赖的,但是解决循环依赖真的需要使用到三级缓冲吗?只使用两级缓存是否可以呢?本篇文章就 Spring 是如何使用三级缓存解决循环依赖作为引子,验证两级缓存是否可以解决循环依赖。原创 2023-02-01 15:40:15 · 376 阅读 · 1 评论 -
初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Spring)
改进后的代码主要体现在了成员位置定义了一个Map类型的容器beans,在创建这个beans之后,在静态代码块中实例化该容器,并且取出配置文件中的所有的key,然后为其对应的全限定类名创建相应的对象,还是单例的,然后存放到Map容器中!至此,问题解决及优化已经完成了。经过JavaSE,JavaWeb的学习,我们早就习惯了编码式开发,突然变成配置式开发,难免会有不适应,这是非常正常的。针对这个问题,我的建议是对比学习,如果你不知道什么是对比学习,建议看看一些什么减肥公司,整形公司的广告,这一点他们做的非常好。原创 2023-01-29 17:34:01 · 93 阅读 · 0 评论 -
初学SSM框架感觉一团糟,希望这篇文章能帮到你!(Mybatis篇)
重新说一下本文的目的,目的就是让初学者知道JDBC的短处与Mybatis是如何改进的,所以大家要以一个全局的眼光来看,看懂Mybatis大概是什么,它跟传统JDBC差在哪里,而不是会写文章中的代码,最终建立自己对Mybatis的认识,为后续学习Mybatis做个铺垫。通过对比我们很直观的能看出来使用Mybatis操作数据库的代码少了很多,大家可以想想上述接口中有十个操作数据库的方法,那减少的代码量是很可观的。当然上一句话不是本文的重点,重点是Mybatis与JDBC的对比,原创 2023-01-29 16:02:51 · 86 阅读 · 0 评论