奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
实操微信支付,适合第一次接通微信支付的同学
我的实际操作命令如下:就会生成图3中多出来的file文件夹,/Users/camel/cert/xxxxxx_cert/file/wechatpay_5A4xxxxxxxxxx9.pem,wechatpay_xxxxx5A4849E9.pem就是微信支付平台证书,也是程序真正需要的。•注意:我的操作说明,我是把下载好的 CertificateDownloader.jar 文件,放在了解压证书的目录里(图3)。//下面的静态参数要仔细看下面的解释,否则只会调用别人写好的方法,压根学不会0-1接入微信支付。原创 2024-08-01 16:51:09 · 261 阅读 · 0 评论 -
Spring Boot整合DeepSeek+MCP实践详解
MCP是一种开放协议,通过标准化的服务器实现,使AI模型能够安全地与本地和远程资源进行交互。用大白话讲,MCP就是一项约定,比如前后端开发接口,需要先定义好json数据结构,MCP就类似于这个定义好的数据结构,但是具体如何生成这个json数据结构,不同的人,不同的语言会有不同的实现方式;解决了什么问题?解决了AI大模型因数据孤岛限制无法发挥潜力的难题。原创 2025-05-20 15:36:08 · 12 阅读 · 0 评论 -
Spring Boot 实现图片的服务器本地存储及前端回显
在网站开发中图片存储的各种方法,包括本地文件系统存储、对象存储服务(如阿里云OSS)、数据库存储、分布式文件系统及内容分发网络(CDN)。文中详细对比了这些方法的优缺点,并针对不同规模的应用推荐了相应的存储策略。原创 2025-05-16 10:09:40 · 41 阅读 · 0 评论 -
springboot 3.0项目升级实践
本文分享了将公司项目从JDK 1.8和旧版Spring Boot升级到JDK 17和Spring Boot 3.3.0的经验。项目采用微服务架构,技术栈包括Spring Cloud Alibaba、Nacos、Redis等。升级过程中遇到的主要挑战包括依赖API变化、非功能性代码改动、依赖版本差异以及Java语法变化。文章详细列出了主要依赖版本,并提供了升级注意事项,如javax包迁移到jakarta、配置文件加载机制变化、自动装配机制调整、ORM框架和Swagger的集成方式变化,以及单元测试从JUnit原创 2025-05-16 09:51:08 · 37 阅读 · 0 评论 -
Spring Boot + JPA 实体类设计五大实战技巧
项目开发中,实体类的有效设计和实现对于构建健壮且易于维护的应用程序至关重要。JPA与Spring Boot的强大功能相结合,使开发人员能够简化数据库操作并创建高度功能化的应用程序。本篇文章我们将深入探讨基于Spring Boot项目开发时,如何利用JPA设计实体类的重要最佳实践。通过遵循这些最佳实践,开发人员可以确保应用程序的完整性、性能和可扩展性。原创 2025-05-15 14:22:23 · 32 阅读 · 0 评论 -
SpringAI更新,废弃tools方法、正式支持DeepSeek!
Spring AI M8版本带来了多项重要升级,包括废弃了tools方法,改用toolCallbacks方法,增强了聊天记忆功能,如新增InMemoryChatMemoryRepository和JdbcChatMemoryRepository,并改进了ChatMemoryAPI。此外,还增强了MCP工具回调配置,改进了提示工程文档,并增强了向量数据库存储功能,如为CosmosDB添加了Azure Entra ID身份验证。同时,DeepSeek SDK正式发布,提供了真正的SDK支持,使得DeepSeek可原创 2025-05-15 10:18:27 · 34 阅读 · 0 评论 -
配音视频生成平台:SpringBoot + Thymeleaf + Spring AI 实战开发
本项目开发了一个基于Web的AI配音视频生成系统,用户可以通过简单的操作完成从视频上传到配音视频下载的全流程。系统后端采用SpringBoot框架,前端使用Thymeleaf和Bootstrap,结合Redis实现异步任务状态跟踪和进度轮询,支持多用户并发处理。主要功能包括视频上传、语音提取、翻译、音频合成、字幕与数字人合成以及最终视频输出。系统通过SpringAI调用AI模型进行翻译和音频合成,利用Redis和SpringTask管理异步任务和进度。项目结构清晰,包含控制器、服务、配置、模型等模块,提供了原创 2025-05-15 09:50:10 · 107 阅读 · 0 评论 -
SpringCloud 整合RabbitMQ+Redis发布订阅+WebSocket 实现分布式系统中消息推送
在分布式系统中,使用WebSocket实现实时消息推送时,面临的主要问题是如何在多个节点间找到持有用户连接的节点。由于WebSocket连接无法序列化并存储到Redis中,本文提出了一种解决方案:当某个节点的消费者接收到消息后,首先将消息存储到数据库,然后通过Redis的发布订阅机制将消息发布出去。所有节点监听Redis中的通道,收到消息后检查是否持有该用户的WebSocket连接,如果有则进行消息推送。此外,本文还介绍了RabbitMQ的配置和使用,以及WebSocket的配置和消息推送的实现细节。通过这原创 2025-05-14 09:27:55 · 205 阅读 · 0 评论 -
Java 泛型中的通配符 T,E,K,V 的具体含义及相关解释
Java泛型是JDK5引入的特性,主要用于提供编译时的类型安全检测机制,避免运行时类型转换错误(如ClassCastException)。泛型的核心是参数化类型,允许在编译时指定数据类型,从而增强代码的类型安全性和可读性。泛型的主要好处包括:1. 类型安全:编译时检查类型匹配,减少运行时错误;2. 消除强制类型转换:减少代码中的类型转换操作;3. 代码复用:支持多种数据类型,避免重复编写代码。常见的泛型通配符包括T(任意类型)、E(集合元素类型)、K(键类型)、V(值类型)和?(未知类型)。通过合理使用泛型原创 2025-05-13 09:35:20 · 26 阅读 · 0 评论 -
Springboot使用Redis Stream实现轻量消息队列
文章主要介绍了如何在Spring Boot项目中集成和使用Redis,特别是Redis Streams的功能。首先,通过引入spring-boot-starter-data-redis依赖,确保项目能够使用Spring Boot提供的Redis启动器。接着,配置了RedisTemplate,使用Jackson进行序列化,并支持Java 8日期时间模块。然后,详细说明了如何配置RedisStreamConfig,包括创建消息监听容器、生成流读取请求、检查Redis版本以及创建消费者组等。此外,还实现了Mess原创 2025-05-12 11:37:28 · 30 阅读 · 0 评论 -
SpringBoot 优雅的进行参数校验
适用范围:Date、Calendar、Instant、LocalDate、LocalDateTime、LocalTime、MonthDay、OffsetDateTime、OffsetTime、Year、YearMonth、ZonedDateTime、HijrahDate、JapaneseDate、MinguoDate、ThaiBuddhistDate。后端校验是针对整个系统的业务逻辑进行校验,包含用户的权限,请求的参数等,校验的范围要大于前端.如果不做后端的校验会怎么样呢?将一个个参数平铺到方法入参中。原创 2025-05-12 11:33:18 · 40 阅读 · 0 评论 -
Java 应用接口被恶意刷爆?如何保护系统安全
接口安全是系统安全的重要组成部分,面对恶意刷爆接口的攻击,我们不能坐以待毙,需要采取有效的防护措施。本文介绍的限流、熔断与降级、认证与授权这三招,就像三道坚固的防线,能够有效地保护接口的安全,让系统在面对恶意攻击时能够稳定运行。原创 2025-05-12 11:26:36 · 258 阅读 · 0 评论 -
SpringBoot实战:七种统计方法耗时的实现方式
在Spring Boot中,有多种方法可以统计方法或请求的耗时,每种方法都有其适用场景和优缺点。以下是七种常见方法的简要总结: 手动使用StopWatch:简单直观,适合临时性测试,但侵入业务代码,不够优雅。 使用AOP实现全局方法耗时统计:代码无侵入,统一管理,适合对整个服务层进行监控,但对特定方法的定制化需求不够灵活。 自定义注解+AOP:更精细的控制,适合只监控关键方法,但需要手动在方法上添加注解。 使用拦截器统计Controller接口耗时:专注于Web接口性能,适合对接口进行统一监控,但无法监控内原创 2025-05-09 13:45:30 · 31 阅读 · 0 评论 -
SpringBoot实现接口防刷的5种实现方案
接口防刷是保障系统安全与稳定性的重要措施。恶意的高频请求不仅会消耗服务器资源,还可能导致数据异常,甚至系统瘫痪。本文将介绍在SpringBoot框架下实现接口防刷的5种技术方案。原创 2025-05-08 09:53:20 · 54 阅读 · 0 评论 -
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
在整合Spring Boot 3框架的时候,发现MyBatis-Plus 提供了一个数据权限插件,这样我就可以不用破坏它原本的结构,实现数据权限的管理。早期Spring Boot 项目中实现项目权限的写法,入参使用map,service层实现时使用wrapper.apply拼接了sql语句,虽说也能实现数据权限的控制,但同时代码可读性很差.// 没有设置本部门数据权限,也能查询本部门数据 user.getDeptId()/** true:没有本部门数据权限,也能查询本人数据 */原创 2025-05-07 17:03:04 · 24 阅读 · 0 评论 -
Spring Boot 3 集成 Spring AOP 实现系统日志记录
在Spring AOP中,JoinPoint和ProceedingJoinPoint都是关键的接口,用于在切面中获取方法的相关信息以及控制方法的执行。它们的主要区别在于它们在AOP通知中的使用方式和功能。`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`title` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '模块标题',原创 2025-05-07 10:48:25 · 18 阅读 · 0 评论 -
SpringBoot实现单点登录(SSO)的4种方案
从简单的基于Cookie-Session的方案,到复杂的OAuth 2.0/OIDC实现,SSO方案的选择应该基于业务需求、安全要求、用户体验目标和技术约束进行综合考量。原创 2025-05-06 11:29:28 · 66 阅读 · 0 评论 -
SpringBoot+MCP 让你的 CRUD 系统秒变AI助手
MCP作为AI与服务之间的桥梁,极大简化了集成工作。想象你有很多不同类型的服务和数据库,每个都有自己独特的"说话方式"。gRPC通过标准化的通信方式可以实现不同语言开发的服务之间进行通信,那么MCP专门为AI模型设计的"翻译官和接口管理器",让AI能以统一方式与各种应用或数据源交互。这里是根据用户输入的问题,大模型会判断我们开放的工具方法中是否有匹配的,如果有则进行调用并返回。我们的目的是将一个Spring服务改造成MCP服务,所以这里不需要进行客户端的配置,同理,在引入依赖的时候也不用引入客户端的依赖。原创 2025-04-29 10:28:12 · 46 阅读 · 0 评论 -
SpringBoot + Vue 调用火山引擎 DeepSeek API 实现流式对话
最近 "万物皆可 DeepSeek",为了跟风,我也想在跟导师做的项目中尝试接入 DeepSeek,希望能帮助到后续的合同验收以及奖项评选。对我们的项目而言,最关键的方法是 streamChatCompletion(),它将请求设置为流式模式,并返回一个 Flowable 对象,允许我们以异步方式处理 DeepSeek API 返回的数据块。在尝试腾讯云失败后,我想到学校最近宣传的接入 DeepSeek 的平台中有一个是基于火山引擎 API 的,于是决定尝试一下。灵活性很高,但需要更多的配置和处理。原创 2025-04-29 10:05:19 · 240 阅读 · 0 评论 -
Java 编程TCP粘包问题及其解决方案
粘包是指发送方发送的多个数据包在接收方被合并成一个数据包,或一个数据包被拆分成多个数据包,导致接收方无法正确解析消息边界。发送方发送的多个小数据包可能被TCP协议合并成一个较大的数据包,或者一个较大的数据包可能被拆分成多个小数据包。TCP使用滑动窗口协议来控制流量,发送端和接收端的窗口大小会影响数据包的发送和接收方式,可能导致数据包合并或拆分。如果接收端的读取速度慢于发送端的发送速度,数据会在接收端的缓冲区中堆积,导致多个数据包被一次性读取,出现粘包。方法:设计一个完整的应用层协议,包含消息头和消息体。原创 2025-04-28 11:30:25 · 31 阅读 · 0 评论 -
Java 实现责任链模式 - 策略模式:优雅处理多级请求的方式
在 Spring 容器启动时 (CommandLineRunner),扫描实现了 MerchantAdminAbstractChainHandler 接口的所有 Spring Bean,并根据它们的 mark() 属性将它们归类到不同的链条中。这种模式的设计使得每个业务逻辑通过一个独立的处理器(Handler)进行处理,并将这些处理器串联成一个链,通过统一的入口执行每一步处理操作。这是责任链的核心方法,每个处理器都会接收到传入的参数 requestParam,并根据具体的业务逻辑进行相应的处理。原创 2025-04-28 09:54:15 · 34 阅读 · 0 评论 -
Spring Boot 执行初始化操作的详解
在 Spring Boot 应用开发中,初始化操作是非常关键的操作。它可以在应用启动时进行一系列预先设定的任务,例如加载配置文件、初始化数据库相关操作、预热缓存数据、注册全局事件监听器等。合理的初始化能让应用启动即稳定高效。但很多开发者对 Spring Boot 提供的丰富初始化手段了解不深。别担心,本篇文章将为你详细介绍 Spring Boot 提供的 7 种初始化操作,通过代码示例,助你轻松掌握,灵活运用。环境准备:准备下面的类,后续介绍的示例代码都会基于下面的类进行。@Service。原创 2025-04-28 09:39:28 · 22 阅读 · 0 评论 -
Java高效开发实战,代码质量飙升的黄金法则
在下一个项目中实践任意两个技巧,并在评论区打卡分享你的优化成果!:当日志级别为INFO时,仍会执行字符串拼接操作,造成资源浪费,对号入座,看看你平时是不是这么干的,嘿嘿~:订单状态与实际支付结果不一致,提示不精确。JDK9增强:可在try外部声明资源。:总耗时为三个调用之和。在方法入口/出口添加。原创 2025-04-28 09:17:09 · 110 阅读 · 0 评论 -
SpringBoot + Tika 实现数据泄露防护、检测敏感信息
用户可以自定义自己的解析器,并通过配置文件将其加入到 Tika 系统中。原创 2025-04-25 13:26:21 · 33 阅读 · 0 评论 -
SpringBoot整合 流式对话+多轮会话管理完整项目实战API安全封装、性能优化全攻略
emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。原创 2025-04-24 14:25:16 · 158 阅读 · 0 评论 -
SpringBoot异步接口实现,提高系统的吞吐量
所以,真正使用异步请求的场景应该是该请求的业务代码中,大量的时间CPU是休息的(比如:在业务代码中请求其他系统的接口,在其他系统响应之前,CPU是阻塞等待的),这个时候使用异步请求,就可以释放tomcat的工作线程,让释放的工作线程可以处理其他的请求,从而提高吞吐量。另外,判断DeferredResult是否有效,只是一个简单的判断,实际中判断有效的并不一定是有效的(比如:客户端取消了请求,服务端是不知道的),但是一般判断为无效的,那肯定是无效了。不会因为服务端使用了异步,接口的结果就和同步不一样了。原创 2025-04-23 09:28:42 · 23 阅读 · 0 评论 -
Java编程@Transactional注解的使用详解
在实际开发中,我们可能会定义自己的异常类。这时候,如果自定义异常是 RuntimeException 的子类,那么@Transactional注解会默认回滚;如果是 Checked 异常,就需要像处理其他 Checked 异常一样,在注解中指定回滚该异常。需要注意的是,自定义异常的继承结构一定要正确,否则可能会导致回滚策略不符合预期。比如,如果你定义了一个自定义异常MyException,并且让它继承自 Exception(Checked 异常),那么在没有指定回滚该异常的情况下,事务不会回滚。原创 2025-04-21 11:20:37 · 63 阅读 · 0 评论 -
SpringBoot 实现 RSA+AES 自动接口解密
文章首先解释了接口加密的必要性,指出未加密的网络数据容易被抓包工具获取,特别是当传输敏感信息时风险更大。通过混合使用这两种算法,我们用 RSA 来加密 AES 的密钥,然后用 AES 来加密实际传输的数据,既保证了安全性,又兼顾了性能。// 创建一个包含解密数据的新BufferedReader,替换原有的请求Reader。// 包装请求,使控制器能够读取解密后的数据。原创 2025-04-21 11:14:48 · 368 阅读 · 0 评论 -
Spring Boot高并发线程性能提升
轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。高并发性:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。在 Spring Boot 中配置虚拟线程非常简单,只需几行代码即可启用虚拟线程,带来显著的性能提升。自动管理:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。创建虚拟线程非常简单。虚拟线程 是 Java 并发编程的革新,它简化了线程管理,提升了高并发场景下的性能。原创 2025-04-21 10:53:54 · 18 阅读 · 0 评论 -
Java开发者提效工具让编码效率翻倍!
上下文感知能力根据当前代码上下文、注释或方法名自动生成完整代码片段示例:输入// 生成分页查询接口,自动输出包含分页参数、Service 调用、异常处理的完整代码多语言/框架支持覆盖 Java/Python/Go 等 20+语言支持 Spring Boot/Django/React 等主流框架混合编程场景(Java+SQL)无缝协作。原创 2025-04-21 10:43:50 · 242 阅读 · 0 评论 -
Java 探索「距离最近」排序背后的秘密
地理位置()距离的不再是简单的距离比较,而是实时的经纬度的计算。因为你在不同的地方,商家离你的位置都是变化的。原创 2025-04-18 13:22:13 · 44 阅读 · 0 评论 -
Spring Boot集成tika实现word转html
使用的Tika facade类是从Java调用Tika的最简单和直接的方式,而且也沿用了外观的设计模式。它抽象了的Tika库的底层复杂性,例如MIME检测机制,解析器接口和语言检测机制,并提供给用户一个简单的接口来使用。Tika可以根据MIME标准检测文档类型。Tika默认MIME类型检测是使用org.apache.tika.mime.mimeTypes。支持语言识别,Tika 有一类叫做语言标识符在包org.apache.tika.language及语言识别资料库里面包含了语言检测从给定文本的算法。原创 2025-04-17 11:22:38 · 58 阅读 · 0 评论 -
Java编程的硬核技巧让自己成为团队里的“刚需型选手“
当我们在凌晨三点收到服务器报警时,当我们面对堆积如山的需求时,与其焦虑35岁危机,不如悄悄修炼这些「技术自保」套路。从代码层面的防删改结界,到架构层面的分布式设计;从自动化流水线解放双手,到团队里的技术影响力构建,每一个套路都是在为自己积累「不可替代性」。真正的内卷从来不是拼加班时长,而是拼谁能更高效地解决问题,谁能让自己的技术价值被看见。这些暗戳戳的新套路,本质上是程序员对自身技术能力的投资——当你的代码让接手者舍不得改,当你的优化让系统离不开你,当你的自动化让团队依赖你,35岁危机自然会绕道而行。原创 2025-04-17 09:08:36 · 176 阅读 · 0 评论 -
Spring Boot 3 最全 API 版本控制策略合集
Override... // 其余实现略API 版本控制没有银弹,每种方案都有其场景适配性。对外开放接口:路径版本 + 网关分发内部系统调用:注解控制 + Header 版本高扩展需求:策略接口 + 动态注入方案合理使用版本控制策略,将极大提升你的项目稳定性和可维护性!原创 2025-04-15 10:16:09 · 37 阅读 · 0 评论 -
基于数据库锁实现防重复提交
通过使用 token 机制结合数据库的悲观锁或乐观锁,我们可以有效地避免用户重复提交请求,保证数据的一致性和系统的稳定性。悲观锁适用于数据竞争较为激烈的场景,能够确保数据的完整性,但可能会影响系统的并发性能;乐观锁则适用于数据冲突较少的场景,能够提高系统的并发处理能力,但在数据冲突较多时可能会导致多次重试。在实际应用中,我们需要根据具体的业务场景和数据特点选择合适的锁机制来实现 token 验证逻辑。原创 2025-04-15 10:04:48 · 17 阅读 · 0 评论 -
基于Spring状态机驱动订单支付状态流转实战
先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed。状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。原创 2025-04-14 13:47:22 · 44 阅读 · 0 评论 -
java实现解析pdf格式发票
"批号:******/ 生产日期:2024-05-15/ 有效期至:2026-04-30/ 含税单价:4.6000/ 生产厂家:******/ 批准文号:******/\n" +)合 计", Pattern.DOTALL);) 销 名称:(.+?Pattern patternTotal = Pattern.compile("\\(小写\\)¥(\\d+(\\.\\d+)?patterns.put("productionDate", "生产日期:(\\d{4}-\\d{1,2}-\\d{1,2})/");原创 2025-04-14 12:34:38 · 110 阅读 · 0 评论 -
Spring Boot 3.4 + ThreadPoolTaskExecutor 批量插入百万数据!
提升大规模数据插入的效率,减少数据库压力,提高整体性能。原创 2025-04-11 09:13:39 · 36 阅读 · 0 评论 -
Java实现PDF文字图片转Word文档
确保系统支持相应的图片格式,否则可能需要添加额外的依赖(如JPEG2000支持)。:使用Apache PDFBox处理PDF,Apache POI生成Word文档。:代码按页处理,先插入文本再插入图片,可能无法保留原始PDF中的精确位置。此代码提供了一个基础框架,可根据具体需求调整文本和图片的布局处理。// 插入图片到Word。// 提取并插入图片。// 保存Word文档。:将提取的文本和图片按顺序写入Word文件。-- 图片处理 -->:从每页中提取文本和嵌入的图片。原创 2025-04-09 16:47:07 · 122 阅读 · 0 评论 -
使用screw一键生成数据库文档
crew提供两种实现方式,分别是代码实现和实现,接下来我会分别介绍下这种方式的实现,希望能解决和我有一样问题的你。原创 2025-04-08 11:14:02 · 46 阅读 · 0 评论