SpringBoot2启示录
文章平均质量分 80
大狼狗启示录,与SpringBoot2、SpringCloud2相关的,例如eureka/zuul/jpa/mybatis plus/feign/websocket/jms/poi/redis/udp等等。
Moshow郑锴
Powered by Core iMoshow
展开
-
HttpMediaTypeNotAcceptableException: No acceptable representation问题解决方法
@RestController会在返回结果时直接返回对象,再由Spring将对象转为json,如果结果对象没有get方法,就会报以上错误。又或者@RequestBody的对象中没有可用的方法,没有@Data注解导致没有Getter方法可用。原创 2024-09-15 23:52:50 · 515 阅读 · 0 评论 -
MyBatis Plus报错:Invalid value type for attribute ‘factoryBeanObjectType‘
如果你用SpringBoot3+并且用MybatisPlus3+,遇到以下错误,恭喜你有救了!因为升级为spring boot3后,MyBatis Plus的依赖要更换为mybatis-plus-spring-boot3-starter。原创 2024-09-15 21:54:46 · 594 阅读 · 0 评论 -
SpringBoot 最大连接数及最大并发数是多少
Spring Boot 是一个基于 Spring 框架的快速开发框架,它本身并不直接管理数据库连接或网络连接的最大连接数和最大并发数。这些参数通常由底层的基础设施和组件来控制,例如数据库连接池,例如Web容器连接设置,操作系统底层或者防火墙等INFRA配置。原创 2024-07-21 22:23:07 · 1295 阅读 · 0 评论 -
SpringBoot的SmartLifecycle生命周期接口
在SpringBoot的应用中,我们通常会利用@PostConstruct和@PreDestroy注解,然而还有更好用的SmartLifecycle 。Spring Boot 的 SmartLifecycle 是 Spring 框架中的一种生命周期接口,它扩展了 Lifecycle 接口。Lifecycle 接口允许你控制一个组件的生命周期,例如启动和停止。而 SmartLifecycle 接口则在此基础上提供了更智能的控制,它能够处理多个 SmartLifecycle 实例的自动排序和依赖管理。原创 2024-07-07 23:28:56 · 1103 阅读 · 0 评论 -
SpringBoot使用Spark的DataFrame API
Apache Spark是一个开源的分布式计算系统,它提供了一个快速和通用的集群计算平台。Spark 能够处理大规模数据,支持多种编程语言,如Scala、Java和Python,并且具有多种高级功能,包括SQL查询、机器学习、图处理和实时数据流处理。Spark是一个功能强大且灵活的计算平台,适用于各种大数据处理场景。通过其丰富的API和组件,Spark能够满足从批处理到实时处理、从数据处理到机器学习的多种需求。原创 2024-06-30 01:49:55 · 1187 阅读 · 0 评论 -
spring-boot-starter-json配置对象属性为空不显示
在Spring Boot中使用spring-boot-starter-json(通常是通过jackson实现的)时,如果你希望在序列化对象时,如果某个属性为空,则不显示该属性,你可以使用@JsonInclude注解来实现这一点。原创 2024-06-27 23:48:58 · 1363 阅读 · 2 评论 -
SpringBoot脚手架MySpringBootAPI(PgSQL+Druid+MyBatisPlus+Lombok)
SpringBoot脚手架《MySpringBootAPI》,基于SpringBoot+Druid+PgSQL+MyBatisPlus+FastJSON+Lombok,其他的请自行添加和配置。原创 2024-06-27 23:24:00 · 1251 阅读 · 0 评论 -
Lambok用法之@onX@Delegate@Cleanup@Singular@Builder@With
例如onConstructor,oMethod, 和onParam允许你在生成的代码中注入自定义的注解。一个常见的用例是结合 Spring 的@Autowired。@Delegate可以让你的类使用其他类的方法,而不需要自己写代码。@Cleanup可以自动管理输入输出流等各种需要释放的资源,确保安全地调用close方法。@Builder让你的类支持链式构造,而@Singular让集合类型字段可以更方便的维护。@With允许你创建一个新的对象,该对象是当前对象的副本,但某些字段的值已被更改。原创 2024-05-12 23:48:22 · 997 阅读 · 0 评论 -
FastJson2中FastJsonHttpMessageConverter找不到类问题
如果你最近也在升级FastJson到FastJson2版本,而跟我一样也遇到了FastJsonHttpMessageConverter找不到类问题以及FastJsonConfig找不到问题,那么恭喜你,看完本文,安装完fastjson2、fastjson2-extension、fastjson2-extension-spring6这三个类库,你就可以成功使用新版FastJson2了。原创 2024-04-21 08:00:00 · 1466 阅读 · 0 评论 -
JAVA在线代码生成器 | 2024.04.20| 修复CDN问题+推出JDK8/11分支+修复大写下划线转驼峰问题
基于SpringBoot2和Freemarker的代码生成平台,以解放双手为目的,减少大量的重复CRUD,支持MySQL、Oracle、PgSQL主流数据库,可通过建表SQL语句或INSERT语句或者简单JSON生成预设的JPA/JdbcTemplate/Mybatis/MybatisPlus/BeetlSQL/CommonMapper相关模板代码. 感谢大家的使用和反馈,1500的PV和获得超过1.9k的星星是我前进和继续做下去的动力。| https://java.bejson.com/generator原创 2024-04-20 17:57:54 · 1297 阅读 · 0 评论 -
Java SpringBoot中优雅地判断一个对象是否为空
Java SpringBoot中优雅地判断一个对象是否为空。原创 2024-04-02 23:59:10 · 1368 阅读 · 0 评论 -
SpringBoot+Redis实现分布式WebSocket
在分布式系统架构中实现WebSocket的通信机制,它允许在不同的服务器节点之间共享和同步WebSocket会话状态,从而实现跨多个服务器的实时消息传递。会话共享:在分布式系统中,用户的WebSocket连接可能与不同的服务器建立,这就要求系统能够在不同服务器间共享WebSocket会话信息,以便消息能够被正确地传递到所有相关的客户端。负载均衡:使用负载均衡可以提高系统的可用性和伸缩性。原创 2024-03-19 01:06:30 · 3540 阅读 · 1 评论 -
如何实现接口重试
在复杂的接口业务中,API请求数量很多,并且业务处理复杂,便难免会遇到一些网络问题(timeout)或者未知错误(error),这时候需要加入重试机制了。让我们来回顾一下都有什么实现机制吧。包含循环重试/递归重试/Spring Retry(Retry Template)......等8种重试机制。。。当然在请求重试的时候,我们也要注意一些关键点,以免因为重试,引发更多的问题:原创 2024-01-13 22:42:44 · 1354 阅读 · 0 评论 -
Freemarker实现Html全站静态化
在大型网站中,比如主流电商商品页,访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢?其实把页面静态化,好处有很多。例如:访问速度快,更有利于搜索引擎收录等。目前主流的静态化主要有两种:1、纯静态方式:将动态页面抓取并保存为静态页面,页面实际存在于服务器的硬盘中。2、伪静态方式:通过WEB服务器的 URL Rewrite 把外部请求的静态地址转化为实际的动态页面地址,页面本质上是动态页面,静态页面是不存在的。原创 2024-01-06 20:09:31 · 1617 阅读 · 0 评论 -
Spring for Apache Kafka Deep Dive – Part 1: Error Handling, Message Conversion and Transaction Suppo
Spring for Apache Kafka brings the familiar Spring programming model to Kafka. It provides theKafkaTemplatefor publishing records and a listener container for asynchronous execution of POJO listeners. Spring Boot auto-configuration wires up much of the i原创 2023-12-31 13:29:43 · 1014 阅读 · 0 评论 -
Spring for Apache Kafka Deep Dive – Part 2: Apache Kafka and Spring Cloud Stream
We will cover the following in this post:Overview of Spring Cloud Stream and its programming modelApache Kafka®integration in Spring Cloud StreamHow Spring Cloud Stream makes application development easier for Kafka developersStream processing using原创 2023-12-31 13:27:38 · 1024 阅读 · 0 评论 -
MyBatis Plus 大数据量查询优化
如果没有流式查询,我们想要从数据库取 100w 条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。当查询百万级的数据的时候,还可以使用游标方式进行数据查询处理,不仅可以节省内存的消耗,而且还不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。默认情况下,完整的检索结果集会将其存储在内存中。分库分表场景下,单个表的查询结果集虽然不大,但如果某个查询跨了多个库多个表,又要做结果集的合并、排序等动作,依然有可能撑爆内存;原创 2023-12-16 22:48:12 · 1642 阅读 · 0 评论 -
Redis分页+多条件模糊查询组合实现思路
Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如评论,时间线,检索等),只凭借Redis所提供的功能就不太好不处理了。而对于命中的集合,我们将更新其过期时间。虽然上文实现了多条件模糊查询+分页的功能,但是在时间开发中,我们不能无限制的生成新的集合,因为匹配串是很多样化的,这会给缓存带来巨大的压力。原创 2023-10-04 22:15:18 · 807 阅读 · 1 评论 -
Java/ExecutorService中多线程服务ExecuteService的使用
ExecutorService 是 Java 中的一个接口,它扩展了 Executor 接口,并提供了更多的方法来处理多线程任务。它是 Java 中用于执行多线程任务的框架之一,可以创建一个线程池,将多个任务提交到线程池中执行。ExecutorService 接口提供了许多方法,如 shutdown()、shutdownNow()、submit()、execute()、invokeAll() 等,可以更方便地提交任务、执行任务、关闭线程池等操作。原创 2023-09-14 23:51:21 · 2779 阅读 · 0 评论 -
SpringBoot中的可扩展接口
ApplicationContextAware:用来获取ApplicationContext的一个扩展类,ApplicationContext应该是很多人非常熟悉的一个类了,就是spring上下文管理器,可以手动的获取任何在spring上下文注册的bean,我们经常扩展这个接口来缓存spring上下文,包装成静态方法。InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。原创 2023-08-15 21:54:13 · 923 阅读 · 0 评论 -
Spring Cloud Feign+Ribbon的超时机制
在一个项目中(数据产品),需要对接企业微信中第三方应用。在使用 Feign 的去调用微服务的用户模块用微信的 code 获取 access_token 以及用户工厂信息时出现 Feign 重试超时报错的情况,通过此篇文章记录问题解决的过程。原创 2023-08-03 21:35:56 · 384 阅读 · 0 评论 -
SpringBoot整合Caffeine
缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存,到客户端的页面缓存,处处都存在着缓存的身影。缓存从本质上来说,是一种空间换时间的手段,通过对数据进行一定的空间安排,使得下次进行数据访问时起到加速的效果。就Java而言,其常用的缓存解决方案有很多,例如数据库缓存框架EhCache,分布式缓存Memcached等,这些缓存方案实际上都是为了提升吞吐效率,避免持久层压力过大。原创 2023-08-03 21:28:14 · 845 阅读 · 0 评论 -
IDEA(java: 错误: 不支持发行版本 5)
今天在IDEA中运行项目时,突然蹦出error:java:不支持发行版本5报错,原因是项目运行的时候,jdk版本与本地的版本不一致,我的本地jdk版本是11,但是项目默认成了5,所以不一致,建议根据自己使用的JDK修改对应的版本,获取更好的JAVA特性支持。原创 2023-07-11 00:32:51 · 2687 阅读 · 0 评论 -
java: 程序包javax.servlet.http不存在
当项目从2.7.x的springboot升级到3.0.x的时候,会遇到一个“java: 程序包javax.servlet.http不存在”问题,通过引入正确的新包可以解决。新版的话已经叫Jakarta Servlet,Oracle捐给了自Eclipse基金会。原创 2023-06-24 15:57:26 · 8562 阅读 · 0 评论 -
pgsql timestamp without time zone > character varying解决方案
最近给一个项目从中去,mysql中的日期大于小于等于操作符可以直接对string生效,会进行自动转换,但是在pgsql下不行,并且会触发,项目是springboot2+mybatisplus框架,该任务由定时任务执行。解决方案如果你没有用hutool,那么使用 ,格式一般为"2022-10-01 00:00:00";如果你有用hutool,那么可以使用,建议根据实际发生的业务以及针对系统所设置的日期格式对日期类型的String做处理。原创 2022-10-22 20:28:00 · 13323 阅读 · 7 评论 -
Requested bean is currently in creation: Is there an unresolvable circular reference?
升级到springboot2.6之后,提示Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference?报错。原创 2022-04-10 22:00:53 · 6226 阅读 · 0 评论 -
HashMap精选问答
关于HashMapHashMap是使用频率最高的映射(键值对)数据类型。JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。Map四大实现类:知多DHashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果原创 2022-03-15 23:17:48 · 659 阅读 · 1 评论 -
简单的JVM调优
GC垃圾回收器JDK1.8 使用默认参数的java应用使用的GC组合是Parallel Scavenge (新生代) 和 Parallel Old (老年代)新生代(别名)老年代JVM 参数Serial (DefNew)Serial Old(PSOldGen)-XX:+UseSerialGCParallel Scavenge (PSYoungGen)Serial Old(PSOldGen)-XX:+UseParallelGCParallel Scavenge (PSYoungGen)Parallel原创 2022-03-08 00:35:32 · 429 阅读 · 0 评论 -
JVM调优之Java诊断神器Arthas(在线监控jvm,在线修改代码)
`Arthas 是Alibaba开源的Java诊断工具`,深受开发者喜爱 1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! ......原创 2022-03-08 00:16:28 · 920 阅读 · 0 评论 -
JVM Runtime Data Area(运行时数据区中的堆/栈/方法区讲解)
- `Java栈 Java Stack`,可以叫**线程**栈,因为运行程序会分配线程,线程里会包含多个不同的栈帧(stack frame) - `栈帧(Stack Frame)`是一个抽象的概念,为**每个方法**分配不同的堆栈 - `方法区Method Area` (应该叫常量区才对),放了常量,静态变量,类信息。 - `Heap实例堆` ,所有**类实例和数组**的内存均从此处分配,不需要连续空间,同时GC也在这里产生 - `可达性分析算法Reachability Analysis` .....原创 2022-03-06 01:12:08 · 347 阅读 · 0 评论 -
mybatis-plus3.5分页插件使用(PaginationInterceptor)
背景自从mybatis-plus某版本3.4/3.5更新之后,原先的分页插件paginationInterceptor无法正常使用,这里给出最新的solution。paginationInterceptor 变更为 paginationInnerInterceptor验证旧版配置import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;import org.my原创 2022-02-21 23:48:27 · 29478 阅读 · 5 评论 -
JAVA漏洞扫描工具之墨菲安全for IDEA
背景最近log4j漏洞猖狂,某天一个好心网友提交了一份分析报告,指出开源软有问题墨菲漏洞扫描报告forSpringBootCodeGenerator,当时马上就更新所有依赖到最新版本。事后觉得这个工具挺有意思,他基于面向java,基于github和idea,方式多样,深得在下喜欢,所以分享一下使用心得。by zhengkai.bloig.csdn.net需要注意的是github项目必须是java语言为主才行,如果过多javascript等其他文件导致识别不准则还是无法使用=。=我的项目就是这样。。。原创 2022-02-16 22:52:13 · 9697 阅读 · 6 评论 -
2022还在用maven?是时候使用更快构建性能的maven-mvnd了
首先,Apache Maven团队从`Gradle`和`Takari(Maven生命周期优化器)`中获得灵感对Maven进行了`强化`,`提升maven的构建性能`,无需改动项目pom.xml,即可无损使用。本文通过如何下载、安装、配置、构建测试等对Maven Mvnd进行报道。原创 2022-01-21 22:04:29 · 2021 阅读 · 0 评论 -
mybatis批量插入优化(ExecutorType.BATCH/BatchInsert/executeBatch)
Mybatis内置的有3种,默认的是simple单句模式,该模式下它为每个语句的执行创建一个新的预处理语句,单句提交sql;batch模式重复使用已经预处理的语句,并且批量执行所有语句,大批量模式下性能更优。请注意batch模式在Insert操作时事务没有提交之前,是没有办法获取到自增的id,所以请根据业务情况使用。使用simple模式提交10000条数据,时间为19s,batch模式为6s ,大致情况如此,优化的具体还要看提交的语句情况。如果需要使用foreach。原创 2021-12-29 23:35:29 · 30806 阅读 · 25 评论 -
Java中List使用Comparator.comparing进行排序
1.首先你需要`list.parallelStream().sorted` 进行流处理,使用`parallelStream`可以充分调度多核CPU。2.使用`Comparator.comparing`进行排序,`reversed()`进行`倒序`排列,`thenComparing`进行下一个排序。3.`Comparator.comparing()`里面的内容,也是就是`Object::getter`4.最后格式化为需要的格式.collect(Collectors.toList())原创 2021-12-20 23:07:29 · 10486 阅读 · 4 评论 -
springboot连接mysql报错errorCode 0, state 08S01
springboot连接mysql8.0报错errorCode 0, state 08S01原创 2021-12-18 22:54:02 · 35066 阅读 · 8 评论 -
Spring Boot Log4j2漏洞修复指南 (Log4J2 Vulnerability and Spring Boot)
###一句话总结issue###如果你使用的是 Log4j 1.x、Logback 或者其他日志框架,这次就可以幸免于难。如果你使用Spring Boot`默认日志`,也是没有问题的,因为默认是`Commons Logging`。###一句话solution###升级springboot到最新`v2.5.8`和`v2.6.2`以及后续版本,确保安全;如果单独依赖了log4j2日志,请强制使用最新版本`v2.17.1`。原创 2021-12-14 00:09:09 · 13072 阅读 · 12 评论 -
java的StringUtils.isBlank和StringUtils.isEmpty方法区别(org.apache.commons.lang3.StringUtils)
前言估计很多朋友跟我一样,平时也不会特别去注意究竟用isBlank还是isEmpty去判断空字符串,但是大部分场景优先使用isBlank就对了。isEmpty是否为空,只有当==null或者==""才为空isBlank是否为真空,==null和==""以及各种长度的空格==" "都为空而且除了isEmpty/isNotEmpty/isNotBlank/isBlank外,其实还有isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank让我们一起来研究一下org.a原创 2021-10-09 16:59:40 · 1998 阅读 · 0 评论 -
java添加水印文字模糊问题(Graphics2D文字和图形边缘线条平滑效果)
前言最近有个证书管理系统的项目,但是发现用java的graphics2d绘制文字但是文字边缘模糊,于是有了本文的解决方案,可广泛适用于graphics2d绘制的水印等地方。解决方案这是项目实际代码,BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = bufImg.createGraphics();//文字边缘平滑 by zhen原创 2021-09-28 22:05:31 · 1498 阅读 · 2 评论 -
JAVA之ThreadLocal的用途(多线程安全)
什么是ThreadLocal多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的另一种保证多线程访问变量时的线程安全的方法;如果每个线程对变量的访问都是基于线程自己的变量这样就不会存在线程不安全问题。在Java的多线程编程中,为保证多个线程对共享变量的安全访问,通常会使用synchronized来保证同一时刻只有一个线程对共享变量进行原创 2021-08-28 23:17:31 · 688 阅读 · 0 评论