![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
springboot
文章平均质量分 66
springboot单体,相关问题解决
寂寞旅行
编程原则>>>不写代码: 不修改原有代码,尽量不增加新代码,不重复造轮子
在开始的几年中,在csdn中查到了解决开发问题的方法,现在也想成为帮助他人的一份子,出一份力;记录工作点滴困难,让后来者少走弯路;从涉及springboot,springcloud全家桶,mybatis,mp,influxdb,nebula,mysql,redis,mongodb,rabbitmq,多线程编程,分布式锁,html,jsp,jquery;取得系统集成中级证书;
展开
-
导出excel带图片
列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种如何处理图片就是重点相信这个图片,一定可以让大家明白图片的坐标位置的概念了。原创 2024-06-27 08:30:00 · 218 阅读 · 0 评论 -
数据库版本控制--flyway
使用 Flyway 可以很方便的处理数据库表结果、数据的版本迁移,使用简单、自动化,大大提高生产力,再也不需要手工在控制台进行,那样更容易出错或者遗漏,毕竟人都是会经常犯错的。转载 2024-06-01 10:30:00 · 34 阅读 · 0 评论 -
java后台通用导出
导出其实很简单,只需要将数据获取到,然后导出为excel文件即可,一般我们都是通过后台查询数据,然后组装的,其实不用那么麻烦,因为前台已经获取到了数据,90%以上的情况是,只需要导出当前前台已经展示出来的数据,此时就无需做更多事情了,只需要用这些已有数据即可;利用前台传入的数据做导出这样就是一个通用的导出后台接口了,节省了二次查询组装数据的时间,也少去了数据转换的过程,可以直接将已有的前段展示数据,直接导出为excel了。原创 2024-05-28 21:00:03 · 227 阅读 · 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 · 590 阅读 · 0 评论 -
linux java项目脚本
linux利用sdkman 管理jdk多版本命令。linux启动多个java项目命令。linux停止多个java项目命令。原创 2024-03-22 14:40:47 · 253 阅读 · 0 评论 -
nginx ssl证书配置
linux服务器nginx配置ssl证书。至此 已经可以成功通过域名访问到服务器的页面了~~原创 2024-03-11 19:34:18 · 2167 阅读 · 0 评论 -
springboot集成mqtt
随着物联网的火热,MQTT的应用逐渐增多曾经也有幸使用过mqtt,今天正好总结下MQTT的使用;文中涉及的所有代码:MQTT-Demo。原创 2024-02-23 21:15:52 · 3890 阅读 · 4 评论 -
优雅永不过时: spring-retry 重试框架
Spring Retry 是一个用于在 Spring 应用中实现重试机制的库。它提供了一种方便的方式来处理可能因各种原因失败的操作,并在失败时进行重试。一般可以用于: rpc重试, 数据同步等类似问题;/*** 自定义的 retry-listener*/@Component@Overridecontext.setAttribute("a", "我是Retry上下文中存入的数据");System.out.println("listener>>>开始监听");// 否决整个重试// 继续重试。原创 2024-01-06 14:50:46 · 1211 阅读 · 0 评论 -
springboot集成flowable工作流
1、Flowable的所有数据库表都以ACT_开头。第二部分是说明表用途的两字符标示符。服务API的命名也大略符合这个规则。2、ACT_RE_: 'RE’代表repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。3、ACT_RU_: 'RU’代表runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。原创 2024-01-03 10:46:42 · 2417 阅读 · 0 评论 -
深度优先和广度优先
搜索方式不同。深度优先搜索算法不全部保留结点,扩展完的结点从数据库中弹出删去;广度优先搜索算法需存储产生的所有结点。运行速度不同。深度优先搜索算法有回溯操作,运行速度慢;广度优先搜索算法无回溯操作,运行速度快。占用空间不同。深度优先搜索算法占用空间少;广度优先搜索算法占用空间大。作用不同。虽然都可以完成树形结构的遍历,但是深度优先一般用于需要先处理最深层级逻辑,广度优先一般用于层层节点展开的处理逻辑;深度优先 用栈;广度优先 用队列;原创 2023-12-30 11:30:05 · 538 阅读 · 0 评论 -
springboot连接mongodb集群(mongoTemplate)
单机版本的mongo,直接配置yml 就可以了今天项目中遇到了需要连接mongo集群的问题,发现直接配置yml是无法实现的,百度了半天依然不行,最后参考了下另外一个成熟项目,尝试扒了下,特此记录;mongodb:pom如下:原创 2023-12-29 15:19:34 · 1843 阅读 · 0 评论 -
手动创建spring bean并注入
注入一个bean常用的方式有几种: 加注解,spring.favorite中添加类全路径 等今天涉及到了一个问题,就是需要在程序中,根据名字,在jar中寻找class,动态加载对象,然后变成bean 注入到spring容器中,当然还有其他问题;加载jar包中的class根据加载的class创建对象手动创建bean,注入spring容器中每个类加载器不同,那么加载的class也一定不同。原创 2023-12-05 19:02:24 · 472 阅读 · 0 评论 -
配置文件-依赖注入
spring注入bean的时候,可以指定某些注入顺序例如:A B两个bean注入,B依赖A ,所以要先注入A 然后才能注入B,此时如何处理呢?之所以导致依赖注入顺序时效的原因是由于 类似 @Configuration 等 aop扫描是不分先后顺序的,然后通过 spring.factories文件,是明确了要注入的文件,然后由于文件上有依赖顺序,所以生效!原创 2023-10-16 15:31:25 · 139 阅读 · 0 评论 -
@ConditionalOnProperty 用法
ConditionalOnProperty 是Spring Boot中的条件注解,它的核心功能是通过属性名以及属性值来实现的,常被用于判断某个属性是否存在,然后决定某个Bean是否创建;其实这个注解 @ConditionalOnProperty 相当于就是java SPI机制的另一种实现方式,更加灵活,在配置文件中更改,当注册中心为nacos,可以实现不重启项目就能自如切换相应实现类的效果;也就是热加载的效果,热加载其实是 @RefreshScope 发生的了作用@RefreshScope概述。原创 2023-10-12 15:21:08 · 1399 阅读 · 6 评论 -
基于ReadWriteLock的全局安全缓存实现
本地线程副本ThreadLocal内存Memchache可持久化的redis上述缓存都有用过,使用的场景各不相同在spring项目中,其实用spring cache 可以解决大部分问题,当有多租户的情况,或者缓存各自的用户信息的时候,可以采用本地线程变量副本处理,当然如果用上述工具类,也会使项目中的缓存使用更佳灵活;原创 2023-09-13 14:22:17 · 75 阅读 · 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 · 138 阅读 · 0 评论 -
NoUniqueBeanDefinitionException: expected single matching bean but found 2
看到这个错误,大致也能猜出错误的原因,就是spring中注入的bean重复了,本来应该是单利的bean,但是现在却找到了两个,那么导致这个问题的原因是什么?如何解决呢?那么为什么他会自定义了一个包扫描,且开启了呢?其实不怪他:因为这个项目要引入很多自定的jar包,jar包中就是有与目前同名的bean要注入,但是包路径不同,为了都可以注入成功,所以最终也只能采用此办法,相当于全局都开启了这个 配置;原创 2023-09-08 17:38:14 · 3175 阅读 · 0 评论 -
spring事件监听event(默认的mq)
项目中的业务难免是相互关联的,但是代码中我们应该尽量做到低耦合,常见的做法就是引入mq来作为松耦合的一种手段;其实最常见的解耦和就是接口了,MVC直接通过接口(约定好的一种规则)相互调用,都是解耦的一种体现;还有就是springbean aop等 也就是IOC 都是解耦和的场景;通常mq是我们的选择,但是当仅仅是为了解耦的简单业务场景,其实完全没必要引入mq,而spring中的event则就可以实现解耦~原创 2023-08-21 07:00:00 · 580 阅读 · 0 评论 -
java热插拔组件 SPI机制
在项目中,如果想要增加项目的灵活性,健壮性, 高逼格,那么你要对于java中的一些机制有了解;java中的spi机制spring中的spring.factories 等通过两种方式都可以实现spi机制的调用,这里展示简单调用,当项目中有多个实现类的时候,就可以灵活多变的实现热插拔效果了~原创 2023-08-14 07:00:00 · 768 阅读 · 0 评论 -
springboot全局统一返回处理
项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式;如果项目中按照这种方式 @RestControllerAdvice + ResponseBodyAdvice接口,就能实现大部分的统一返回出参功能了,无论是正常请求还是异常请求,无论是简单类型还是集合返回,相当于都有了统一的封装处理;快试试,用到项目中吧~原创 2023-08-07 08:00:00 · 1264 阅读 · 0 评论 -
老鸟是这样实现springboot日志打印的~
项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,查找问题,快速定位bug,都会非常有利;/*** 打印日志 出参入参*/@Component虽不复杂,但是在实际项目中应用的话,还是很称心如意的~,而且在此基础上,还能根据自己的需要扩展就好了;原创 2023-06-25 11:20:34 · 659 阅读 · 0 评论 -
springboot集成quartz
引用上一篇博客的说法springboot整合xxl-job,集群模式下,定时任务会造成很严重的事故,其次普通的任务也无法做到像xxl-job与Quartz 一样,及时启停,修改等;上一篇介绍了xxl-job,这篇搞一下Quartz,老牌分布式定时任务了;基本实现了任务的动态添加有参数的具体任务调用,修改QuartzJob中的方法获取,参数获取等,但是依旧采用代理实现任务并发执行未处理,后续完善项目地址。原创 2023-06-14 17:54:03 · 3454 阅读 · 0 评论 -
springboot整合xxl-job
单机模式中的定时任务很简单,一般使用@EnableScheduling 就可以了,但是在集群中,这个简单的定时任务就不行了,会有问题;例如我要在半夜12点执行一个任务,发送一条短信给一个用户,但是当为集群的时候,这种简单的任务,在多个节点上,都会执行,那么就会造成任务的重复执行,每个用户都接受到了多条相同的短信,这种错误还好,但是当涉及到计算等问题的时候,这种错误就是致命的,而且当没有集群经验的时候,这种问题在单机情况下还是正常,集群就会出现大问题!!!原创 2023-06-13 15:27:28 · 7182 阅读 · 4 评论 -
springboot国际化多语言配置
如此做之后,就可以实现,多语言了,不过要做的事情还很多,相当于你所有页面要展示的词汇,都需要放到这里三个配置文件中搞一遍,才可以。原创 2023-05-23 07:00:00 · 1239 阅读 · 0 评论 -
junit如何在多模块项目中使用
相信后端的小伙伴对于junit测试应该不陌生,当我们写好了一些功能之后,由于不太放心是否会出现问题,我们会选择自测;第一种 通过类似postman之类的,直接走接口测试第二种 由于构造数据种种原因,导致不好走接口测试,所以走代码测试,即junit测试在springboot项目中,单模块项目很好做,只要生成测试类即可,那么在springboot多模块项目中如何做junit测试呢?会有什么问题?单元测试的目的是在集成测试和功能测试之前对软件中的可测试单元进行逐一检查和验证。原创 2023-05-11 10:59:52 · 1939 阅读 · 4 评论 -
事务传播行为 @Transactional
事务传播行为: 指的是在项目中开启多个事务后,他们之间的影响关系;虽然事务的传播枚举还有很多,但是其实,只要掌握这两个就够了,其他的了解即可;如果当前存在事务,就在当前事务内执行;否则,就执行与 PROPAGATION_REQUIRED 类似的操作。如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。以非事务方式运行,如果当前存在事务,则把当前事务挂起。以非事务方式运行,如果当前存在事务,则抛出异常。原创 2023-05-09 07:45:00 · 683 阅读 · 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 · 514 阅读 · 1 评论 -
springbean 的 setter/构造注入
我们知道,一般java中的依赖注入有三种:1 属性注入2 settter注入3 构造注入提示:以下是本篇文章正文内容,下面案例可供参考基于setter和构造注入得到的bean,其实也是spring中的,但是我将它存了一个静态变量副本,然后直接使用了~~原创 2023-04-11 18:32:34 · 647 阅读 · 0 评论 -
knife4j:比swagger更好的在线文档
之前说过集成swagger文档,当时用的是swagger,今天介绍一个跟它类似,但是比他的页面更加精美,功能更加强大的一个项目在线接口文档, knife4j—小刀knife4j 的文档确实要比swagger文档看起来好看很多,而且高版本的knife4j还有个非常强大的功能,对于前端来说非常好;粘贴过去就可以了离线文档各种格式。原创 2023-04-03 07:30:00 · 501 阅读 · 1 评论 -
实体类入参集合的校验
入参集合的校验一般当用spring的时候,入参校验一般会选择validation框架;然后正常的校验如 常见非空,然后当入参为集合的时候,我们不仅要校验入参的集合是否为空,还要校验集合中的每一个item;如果 item为一个实体类,那么实体类中的每一个属性也要校验;例如``@Datapublic class AddUserDto {@NotEmpty@Validprivate List<PhoneInfo> phoneList;@Datapublic static clas原创 2021-09-18 15:46:47 · 1256 阅读 · 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 · 240 阅读 · 0 评论 -
函数编程之Function
在java8之后,我已经习惯了开始用stream()方式编程,但是对于新引入的其他功能,还是不清楚,今天经历了一个编程问题后,让我对于Function() 这个函数有了新的认知;此次通过解决项目中的实际问题,记录下,对于function函数的使用有了更进一步的了解,也希望能读到此文章的小伙伴能收益,文章很浅显,希望大佬不吝赐教。原创 2023-02-17 10:23:51 · 1183 阅读 · 0 评论 -
自定义注解思考
自定义注解之前有介绍过,用到的为AOP拦截,同一处理,什么是AOP ,拦截是为了是什么?按我个人的理解,就是对某一个类,或者某一个方法的动态增强,何为增强呢。比如,之前说的自定义注解,本身这个方法是不具备校验参数的能力的,但是通过注解的添加,那么这个方法就有了校验参数的能力。这是再进入方法之前,不仅如此,我们还可以在方法之后,在做一些实情,比如之后,添加日志。这样做的好处就是不用每个方法都要写...原创 2021-04-08 14:29:36 · 196 阅读 · 0 评论 -
自定义注解
自定义注解,与spring框架中自带的注解如 @Controller 等,用法一直,接下来自定义一个注解。4 使用方法,直接在一个方法上加入该注解,那么他就会获取到name 的值,然后进行相应操作。2 新建一个名字为ParamCheck的自定义注解。3 配置该注解的切面。原创 2021-03-15 15:10:35 · 531 阅读 · 0 评论 -
2020-10-20 浅浅浅浅浅浅谈循环依赖
循环依赖: a依赖b,b依赖a; 这是一种最简单的循环依赖,在spring中,所有的bean 都是单例的,spring帮助我们完美解决了循环依赖的问题;依赖,也叫依赖注入,DI . 可能我这么说比较陌生,那么我举个例子:DEMO:在 UserServiceImpl 中 我调用了 detpServcie; 然后我在 DeptServiceImpl 中 我调用了 userService; 这...原创 2020-10-20 16:03:08 · 169 阅读 · 0 评论 -
使用swagger文档
Spring Boot 框架是目前非常流行的微服务框架,我们很多情况下使用它来提供 Rest API,而对于 Rest API 来说很重要的一部分内容就是文档,Swagger 为我们提供了一套通过代码和注解自动生成文档的方法,这一点对于保证 API 文档的及时性将有很大的帮助。本文将使用 Swagger 2 规范的 Springfox 实现来了解如何在 Spring Boot 项目中使用 Swag...原创 2020-09-11 11:47:15 · 365 阅读 · 0 评论 -
单点登陆经典逻辑
借鉴文章: https://blog.csdn.net/xiaoguan_liu/article/details/91492110首先说下单点登陆(sso)的场景,就是一个公司推出了好多个产品,都属于这个公司,那么登陆其中一个产品,再登陆其他产品就无需再次登陆了,即只登陆一次,访问所有该公司下的所有产品,这就是我理解的单点登陆. 例如: 我登陆了qq,那么我进入qq空间则不用再次输入账号密码,而...原创 2020-10-12 10:40:34 · 178 阅读 · 0 评论 -
IOC和AOP
哈哈哈,老生常谈~~什么是IOC(控制反转),什么是AOP(切面编程),啥是DI(依赖)1 IOC 控制指的是,创建对象的控制权,反转,控制权 移交给了容器传统的开发方式 :往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来(创建对象的控制权在对象中 A)使用 IoC 思想的开发方式 :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来...原创 2022-01-19 10:10:35 · 467 阅读 · 0 评论 -
模拟大量数据处理,利用多线程处理
例如我想计算, 1-100的和是多少,我可以用十个线程,分别计算1-10,11-20.......91-100。原创 2022-04-21 14:29:47 · 155 阅读 · 0 评论 -
实际项目中线程池大小应该如何界定
这个问题手写应该知道,目前cpu 的核数,因为只有知道了核数,才可以预估出最佳的线程池大小什么意思呢?io密集型 就是类似于有io操作那种,耗时较长,那么CPU处理一个线程的时候就很空闲密集型任务,就是耗时较短的操作,那么处理一个线程CPU,可能会非常忙1 对于不同性质的任务来说,CPU密集型任务应配置尽可能小的线程,如配置CPU个数+1的线程数,IO密集型任务应配置尽可能多的线程,因为I...原创 2022-03-14 11:02:30 · 239 阅读 · 0 评论