
springboot
文章平均质量分 67
springboot单体,相关问题解决
寂寞旅行
不修改原有代码,尽量不增加新代码,不重复造轮子;
一线码农的开发流水账记录;
软考中级证书;正在准备软考高级考试;
有微信技术交流群,请加微信18845299066,备注CSDN
展开
-
oauth2授权码模式客户端信息数据库改造
之前已经集成了oauth2已经实现了oauth2的授权码模式,现在改造下,将客户端信息从内存中删除,放入数据库中,有利于更好的维护客户端,为了方便后续集成其他系统,实现单点登录做准备;oauth2单点登录,授权码模式。原创 2025-03-09 13:00:00 · 44 阅读 · 0 评论 -
java sdk 流式回答 deepseek
deepseek中提供了多种种问答方式,一种是直接回答,另一种是流式回答。文档地址: DeepSeek API 文档。控制器处理流式返回,通过outputStream刷数据,超过30s 导致超时报错原创 2025-03-02 09:45:00 · 663 阅读 · 0 评论 -
java定时任务备份数据库
数据库备份程序中数据库备份可以有效避免因为意外,导致数据丢失,因此数据备份显得尤为重要。这样就无须借助其他工具,只要程序运行,就能随时完整备份数据库了。原创 2025-01-25 18:30:00 · 685 阅读 · 0 评论 -
oauth2授权码模式单点登录
oauth2 有四种模式,常用的为密码和授权码,剩下两种几乎不用密码模式,很好理解,就是根据输入的用户名/密码进行登录认证的,最终返回一个合法token授权码(grant_type = authorization_code), 是利用唯一的客户端信息,申请的一个临时授权码,然后根据授权码换取合法token,可以利用这个特性,达到单点登录的效果提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。原创 2024-10-03 13:02:43 · 6761 阅读 · 0 评论 -
mybatis-plus与xml结合使用
只对mybatis增强,不做修改;mybatis-plus可以逻辑层,利用wrapper拼接条件,这样就节省了在xml中自己手写条件的各种判断和传参,尤其是lambdawrapper对于逻辑层的条件拼接更加友好;至此,就是想了mybatis-plus与xml有机结合使用,巧用 ${ew.customSqlSegment}实现。原创 2024-10-01 17:46:06 · 4109 阅读 · 1 评论 -
微服务如何不影响生产环境debug问题?
每个人起一套环境,用来开发很费劲每个人一套环境,数据不同步,造成开发耗时开发服务依赖公共框架服务,如果想请求调试开发服务的接口,需要经历很多个公共服务接口线上问题,本地复现难度大,可以通过此种方式轻松解决,将线上请求打到本地服务中这样就完美实现了,在不影响线上环境的情况下,直接debug某个有问题的微服务,堪称完美~原创 2024-09-28 11:15:00 · 3173 阅读 · 4 评论 -
gateway整合knife4j(微服务在线文档)
下次我要尝试用zuul,因为knife4j的官网文档上说,zuul就不会有这个问题;失败了,我整合了zuul 发现根本就不行,应该还是版本问题,先这样吧,zuul 不弄了~~~原创 2023-04-21 17:54:17 · 1929 阅读 · 1 评论 -
neo4j(spring) 使用示例
neo4j官网地址可以选择桌面版安装等多种方式,我这里采用的是docker安装如果无法下载的话,请更新下docker仓库镜像源地址可以参考docker镜像源地址spring-boot-starter-data-neo4j 2.7.6 与之前的版本使用还是有很多区别的,在网上找了很多,没有找到合适的,自己摸索了两天,搞了一个出来,希望可以帮助到你。原创 2024-09-17 15:45:00 · 1254 阅读 · 0 评论 -
执行分段延时轮询任务
至此,就满足了这样一个分段延时的轮询任务的执行,而且这里是异步执行,主线程会立即返回,用户无感知的后台轮询,也节省了使用定时任务不停轮询造成的开销;`这里还有一个不用定时任务的原因:`*除了上述说的造成开销外,就是定时任务有一定延迟,你如果设置定时任务的时间太短,那么服务器压力陡增,如果时间过长,那么会导致有一定的延迟,所以综合考量,都是这种方式更加合理*原创 2024-09-17 11:15:00 · 596 阅读 · 0 评论 -
导出excel带图片
列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种如何处理图片就是重点相信这个图片,一定可以让大家明白图片的坐标位置的概念了。原创 2024-06-27 08:30:00 · 687 阅读 · 0 评论 -
数据库版本控制--flyway
使用 Flyway 可以很方便的处理数据库表结果、数据的版本迁移,使用简单、自动化,大大提高生产力,再也不需要手工在控制台进行,那样更容易出错或者遗漏,毕竟人都是会经常犯错的。转载 2024-06-01 10:30:00 · 153 阅读 · 0 评论 -
java后台通用导出
导出其实很简单,只需要将数据获取到,然后导出为excel文件即可,一般我们都是通过后台查询数据,然后组装的,其实不用那么麻烦,因为前台已经获取到了数据,90%以上的情况是,只需要导出当前前台已经展示出来的数据,此时就无需做更多事情了,只需要用这些已有数据即可;利用前台传入的数据做导出这样就是一个通用的导出后台接口了,节省了二次查询组装数据的时间,也少去了数据转换的过程,可以直接将已有的前段展示数据,直接导出为excel了。原创 2024-05-28 21:00:03 · 465 阅读 · 0 评论 -
es-7.14.0(easy-es)使用
全文索引,首选es,最近看了下easy-es,完全与mybatis-plus类似,简单试了下,很不错;easy-es 使用的 7.14.0,这里也仅用此版本说明;安装了桌面版本docker desktop安装了es 和 kibana 中文分词 ik 都是 7.14.0倒排索引正排索引: 索引>>数据(mysql)文档中的关键词所在文档id列表;所有的这些信息就是倒排文件(还记录了关键词所在位置,出现次数)easy-es使用起来真的是很丝滑,可以直接看官网介绍了,文档很全;/**原创 2024-03-28 15:56:30 · 1275 阅读 · 0 评论 -
linux java项目脚本
linux利用sdkman 管理jdk多版本命令。linux启动多个java项目命令。linux停止多个java项目命令。原创 2024-03-22 14:40:47 · 346 阅读 · 0 评论 -
nginx ssl证书配置
linux服务器nginx配置ssl证书。至此 已经可以成功通过域名访问到服务器的页面了~~原创 2024-03-11 19:34:18 · 3488 阅读 · 0 评论 -
springboot集成mqtt
随着物联网的火热,MQTT的应用逐渐增多曾经也有幸使用过mqtt,今天正好总结下MQTT的使用;文中涉及的所有代码:MQTT-Demo。原创 2024-02-23 21:15:52 · 4527 阅读 · 4 评论 -
优雅永不过时: spring-retry 重试框架
Spring Retry 是一个用于在 Spring 应用中实现重试机制的库。它提供了一种方便的方式来处理可能因各种原因失败的操作,并在失败时进行重试。一般可以用于: rpc重试, 数据同步等类似问题;/*** 自定义的 retry-listener*/@Component@Overridecontext.setAttribute("a", "我是Retry上下文中存入的数据");System.out.println("listener>>>开始监听");// 否决整个重试// 继续重试。原创 2024-01-06 14:50:46 · 1675 阅读 · 0 评论 -
深度优先和广度优先
搜索方式不同。深度优先搜索算法不全部保留结点,扩展完的结点从数据库中弹出删去;广度优先搜索算法需存储产生的所有结点。运行速度不同。深度优先搜索算法有回溯操作,运行速度慢;广度优先搜索算法无回溯操作,运行速度快。占用空间不同。深度优先搜索算法占用空间少;广度优先搜索算法占用空间大。作用不同。虽然都可以完成树形结构的遍历,但是深度优先一般用于需要先处理最深层级逻辑,广度优先一般用于层层节点展开的处理逻辑;深度优先 用栈;广度优先 用队列;原创 2023-12-30 11:30:05 · 5635 阅读 · 0 评论 -
springboot连接mongodb集群(mongoTemplate)
单机版本的mongo,直接配置yml 就可以了今天项目中遇到了需要连接mongo集群的问题,发现直接配置yml是无法实现的,百度了半天依然不行,最后参考了下另外一个成熟项目,尝试扒了下,特此记录;mongodb:pom如下:原创 2023-12-29 15:19:34 · 3139 阅读 · 0 评论 -
手动创建spring bean并注入
注入一个bean常用的方式有几种: 加注解,spring.favorite中添加类全路径 等今天涉及到了一个问题,就是需要在程序中,根据名字,在jar中寻找class,动态加载对象,然后变成bean 注入到spring容器中,当然还有其他问题;加载jar包中的class根据加载的class创建对象手动创建bean,注入spring容器中每个类加载器不同,那么加载的class也一定不同。原创 2023-12-05 19:02:24 · 1341 阅读 · 0 评论 -
配置文件-依赖注入
spring注入bean的时候,可以指定某些注入顺序例如:A B两个bean注入,B依赖A ,所以要先注入A 然后才能注入B,此时如何处理呢?之所以导致依赖注入顺序时效的原因是由于 类似 @Configuration 等 aop扫描是不分先后顺序的,然后通过 spring.factories文件,是明确了要注入的文件,然后由于文件上有依赖顺序,所以生效!原创 2023-10-16 15:31:25 · 245 阅读 · 0 评论 -
@ConditionalOnProperty 用法
ConditionalOnProperty 是Spring Boot中的条件注解,它的核心功能是通过属性名以及属性值来实现的,常被用于判断某个属性是否存在,然后决定某个Bean是否创建;其实这个注解 @ConditionalOnProperty 相当于就是java SPI机制的另一种实现方式,更加灵活,在配置文件中更改,当注册中心为nacos,可以实现不重启项目就能自如切换相应实现类的效果;也就是热加载的效果,热加载其实是 @RefreshScope 发生的了作用@RefreshScope概述。原创 2023-10-12 15:21:08 · 1765 阅读 · 6 评论 -
基于ReadWriteLock的全局安全缓存实现
本地线程副本ThreadLocal内存Memchache可持久化的redis上述缓存都有用过,使用的场景各不相同在spring项目中,其实用spring cache 可以解决大部分问题,当有多租户的情况,或者缓存各自的用户信息的时候,可以采用本地线程变量副本处理,当然如果用上述工具类,也会使项目中的缓存使用更佳灵活;原创 2023-09-13 14:22:17 · 143 阅读 · 0 评论 -
手写一个springboot starter,并使用starter
你一定用过很多starter , 例如 spring-boot-starter,spring-boot-starter-test等等,那么如何实现一个自定义的starter,以及自定义starter的意义和作用;创建一个项目作为starter本体,这里做一些事情,例如: 拦截所有路径,然后打印一下创建另外一个项目,引入之前创建的starter,然后使用,看是否能够拦截路径,并打印starter本体打包后,需要发布到maven仓库中,然后另外一个项目通过maven引入。原创 2023-09-18 18:12:08 · 412 阅读 · 0 评论 -
NoUniqueBeanDefinitionException: expected single matching bean but found 2
看到这个错误,大致也能猜出错误的原因,就是spring中注入的bean重复了,本来应该是单利的bean,但是现在却找到了两个,那么导致这个问题的原因是什么?如何解决呢?那么为什么他会自定义了一个包扫描,且开启了呢?其实不怪他:因为这个项目要引入很多自定的jar包,jar包中就是有与目前同名的bean要注入,但是包路径不同,为了都可以注入成功,所以最终也只能采用此办法,相当于全局都开启了这个 配置;原创 2023-09-08 17:38:14 · 3799 阅读 · 0 评论 -
spring事件监听event(默认的mq)
项目中的业务难免是相互关联的,但是代码中我们应该尽量做到低耦合,常见的做法就是引入mq来作为松耦合的一种手段;其实最常见的解耦和就是接口了,MVC直接通过接口(约定好的一种规则)相互调用,都是解耦的一种体现;还有就是springbean aop等 也就是IOC 都是解耦和的场景;通常mq是我们的选择,但是当仅仅是为了解耦的简单业务场景,其实完全没必要引入mq,而spring中的event则就可以实现解耦~原创 2023-08-21 07:00:00 · 902 阅读 · 0 评论 -
java热插拔组件 SPI机制
在项目中,如果想要增加项目的灵活性,健壮性, 高逼格,那么你要对于java中的一些机制有了解;java中的spi机制spring中的spring.factories 等通过两种方式都可以实现spi机制的调用,这里展示简单调用,当项目中有多个实现类的时候,就可以灵活多变的实现热插拔效果了~原创 2023-08-14 07:00:00 · 1029 阅读 · 0 评论 -
springboot全局统一返回处理
项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式;如果项目中按照这种方式 @RestControllerAdvice + ResponseBodyAdvice接口,就能实现大部分的统一返回出参功能了,无论是正常请求还是异常请求,无论是简单类型还是集合返回,相当于都有了统一的封装处理;快试试,用到项目中吧~原创 2023-08-07 08:00:00 · 1712 阅读 · 0 评论 -
老鸟是这样实现springboot日志打印的~
项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,查找问题,快速定位bug,都会非常有利;/*** 打印日志 出参入参*/@Component虽不复杂,但是在实际项目中应用的话,还是很称心如意的~,而且在此基础上,还能根据自己的需要扩展就好了;原创 2023-06-25 11:20:34 · 781 阅读 · 0 评论 -
springboot集成quartz
引用上一篇博客的说法springboot整合xxl-job,集群模式下,定时任务会造成很严重的事故,其次普通的任务也无法做到像xxl-job与Quartz 一样,及时启停,修改等;上一篇介绍了xxl-job,这篇搞一下Quartz,老牌分布式定时任务了;基本实现了任务的动态添加有参数的具体任务调用,修改QuartzJob中的方法获取,参数获取等,但是依旧采用代理实现任务并发执行未处理,后续完善项目地址。原创 2023-06-14 17:54:03 · 3746 阅读 · 0 评论 -
springboot整合xxl-job
单机模式中的定时任务很简单,一般使用@EnableScheduling 就可以了,但是在集群中,这个简单的定时任务就不行了,会有问题;例如我要在半夜12点执行一个任务,发送一条短信给一个用户,但是当为集群的时候,这种简单的任务,在多个节点上,都会执行,那么就会造成任务的重复执行,每个用户都接受到了多条相同的短信,这种错误还好,但是当涉及到计算等问题的时候,这种错误就是致命的,而且当没有集群经验的时候,这种问题在单机情况下还是正常,集群就会出现大问题!!!原创 2023-06-13 15:27:28 · 8173 阅读 · 4 评论 -
springboot国际化多语言配置
如此做之后,就可以实现,多语言了,不过要做的事情还很多,相当于你所有页面要展示的词汇,都需要放到这里三个配置文件中搞一遍,才可以。原创 2023-05-23 07:00:00 · 1687 阅读 · 0 评论 -
junit如何在多模块项目中使用
相信后端的小伙伴对于junit测试应该不陌生,当我们写好了一些功能之后,由于不太放心是否会出现问题,我们会选择自测;第一种 通过类似postman之类的,直接走接口测试第二种 由于构造数据种种原因,导致不好走接口测试,所以走代码测试,即junit测试在springboot项目中,单模块项目很好做,只要生成测试类即可,那么在springboot多模块项目中如何做junit测试呢?会有什么问题?单元测试的目的是在集成测试和功能测试之前对软件中的可测试单元进行逐一检查和验证。原创 2023-05-11 10:59:52 · 2473 阅读 · 4 评论 -
事务传播行为 @Transactional
事务传播行为: 指的是在项目中开启多个事务后,他们之间的影响关系;虽然事务的传播枚举还有很多,但是其实,只要掌握这两个就够了,其他的了解即可;如果当前存在事务,就在当前事务内执行;否则,就执行与 PROPAGATION_REQUIRED 类似的操作。如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。以非事务方式运行,如果当前存在事务,则把当前事务挂起。以非事务方式运行,如果当前存在事务,则抛出异常。原创 2023-05-09 07:45:00 · 801 阅读 · 0 评论 -
自定义注解--重复提交
用于 接口防刷, 重复提交等;@Target({思路: 根据入参 Hash 之后转为 字符串为key,存入redis,设置失效时间,则这段时间断内再次提交,则为重复提交,直接不处理// 获取请求参数 String paramJSON = JSONUtil . toJsonStr(jp . getArgs());// 计算请求参数hash值 String hash = String . valueOf(HashUtil . fnvHash(paramJSON));原创 2023-04-21 17:22:43 · 696 阅读 · 1 评论 -
springbean 的 setter/构造注入
我们知道,一般java中的依赖注入有三种:1 属性注入2 settter注入3 构造注入提示:以下是本篇文章正文内容,下面案例可供参考基于setter和构造注入得到的bean,其实也是spring中的,但是我将它存了一个静态变量副本,然后直接使用了~~原创 2023-04-11 18:32:34 · 884 阅读 · 0 评论 -
knife4j:比swagger更好的在线文档
之前说过集成swagger文档,当时用的是swagger,今天介绍一个跟它类似,但是比他的页面更加精美,功能更加强大的一个项目在线接口文档, knife4j—小刀knife4j 的文档确实要比swagger文档看起来好看很多,而且高版本的knife4j还有个非常强大的功能,对于前端来说非常好;粘贴过去就可以了离线文档各种格式。原创 2023-04-03 07:30:00 · 744 阅读 · 1 评论 -
实体类入参集合的校验
入参集合的校验一般当用spring的时候,入参校验一般会选择validation框架;然后正常的校验如 常见非空,然后当入参为集合的时候,我们不仅要校验入参的集合是否为空,还要校验集合中的每一个item;如果 item为一个实体类,那么实体类中的每一个属性也要校验;例如``@Datapublic class AddUserDto {@NotEmpty@Validprivate List<PhoneInfo> phoneList;@Datapublic static clas原创 2021-09-18 15:46:47 · 1371 阅读 · 0 评论 -
2021-02-19 函数编程 consumer function
consumerList<BasicArea> list = new ArrayList<>(); Map<String,Consumer<Boolean>> areaPopulate=new HashMap<>(); list.forEach(basicArea -> { ...原创 2021-03-06 14:09:53 · 313 阅读 · 0 评论 -
函数编程之Function
在java8之后,我已经习惯了开始用stream()方式编程,但是对于新引入的其他功能,还是不清楚,今天经历了一个编程问题后,让我对于Function() 这个函数有了新的认知;此次通过解决项目中的实际问题,记录下,对于function函数的使用有了更进一步的了解,也希望能读到此文章的小伙伴能收益,文章很浅显,希望大佬不吝赐教。原创 2023-02-17 10:23:51 · 1585 阅读 · 0 评论