虚拟线程在Spring Boot中的正确使用方式:
启用方式:配置 spring.threads.virtual.enabled=true
Web请求:自动使用虚拟线程处理(无需额外配置)
异步方法:通过 @Async 自动使用虚拟线程
定时任务:需要配置 SchedulingConfigurer
手动创建:使用 Executors.newVirtualThreadPerTaskExecutor()
注意事项:避免CPU密集型任务,谨慎使用ThreadLocal
我们知道,系统面对大流量、高并发的访问请求时,就可能会出现一系列性能问题,导致服务丧失了即时的响应性。如何时刻确保系统具有应对请求压力的能力,是架构设计的核心问题之一。
经典的服务隔离、限流、降级以及熔断等机制能够在一定程度上确保系统的响应性。但这些机制更多的是从系统架构和应用部署的角度出发解决问题,而不是编程技术本身。今天我们要介绍的是构建系统响应性的一种崭新的解决方案,这就是响应式编程(Reactive Programming)。
我们知道,传统的编程模型采用的是同步阻塞式(Blocking)的请求响应过程,这是现有各种经典解决方案所不得不面对的一种限制。 而响应式编程打破了这种限制,采用了异步非阻塞式(Non-Blocking)的编程模型,从而提高服务的响应能力。
View Details适用场景
继续用Feign的场景
1. 已有的老项目,Feign接口超过20个 迁移成本太高,不值得为了“追新”去重构。
2. 深度依赖Spring Cloud微服务生态 服务发现、负载均衡、熔断降级全部用Spring Cloud那一套,Feign的集成度更高。
3. 团队对Feign非常熟悉 没有学习成本,出了问题知道怎么排查。
4. 不需要响应式编程 业务场景简单,不需要WebFlux,Feign完全够用。
转向@HttpExchange的场景
1. 新项目从零开始 没有历史包袱,直接用Spring官方原生方案。
2. 需要使用响应式编程 WebFlux + @HttpExchange是绝配。
3. 追求性能和资源效率 高并发场景下,@HttpExchange的吞吐量和内存占用都优于Feign。
4. 不想引入Spring Cloud 项目不需要完整的微服务功能,只想用声明式HTTP客户端。
5. 追求技术栈“干净” 希望依赖最小化,不想引入第三方组件。
View DetailsTransmittableThreadLocal(TTL)是阿里开源的一个线程间数据传递解决方案,解决了InheritableThreadLocal在线程池场景下的问题。
View Detailsspring.cloud.nacos.discovery.ip = xx
spring.cloud.nacos.discovery.port = xxx
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
tar -zxvf jdk-21_linux-aarch64_bin.tar.gz
export JAVA_HOME=/usr/local/jdk-21.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
代码生成器,对于我们提升开发效率还是非常有价值的,快速生成代码和避免手误操作,能给我们减少了很多麻烦,又多了一点摸鱼的时间[偷笑]。
以前我用的比较多的是easy code,但是需要安装插件,配置模版,所以多少还是有些不方便。
自从项目改用mybatis-plus后,mybatis-plus-generator就成了它的替代品,很方便,也很灵活,个人推荐使用。
Tesseract 是一款开源的 OCR 引擎,由 Google 维护。它支持多种语言的文字识别,具有较高的识别准确率和良好的扩展性。Tesseract 的核心作用是对经过预处理的图像进行分析,提取其中的文字信息并转换为文本。它可以处理不同字体、大小和格式的文字,并且能够通过训练来提高对特定场景文字的识别能力。
官方网站:https://github.com/Tesseract-ocr/Tesseract
官方文档:https://github.com/Tesseract-ocr/tessdoc
语言包地址:https://github.com/Tesseract-ocr/tessdata
下载地址:https://digi.bib.uni-mannheim.de/Tesseract/
View Details