
spring-boot
文章平均质量分 95
duration~
将语言当做协议,聊天当做通信,将说话的内容当做数据。上下层之间进行交互时所遵循的约定叫做“接口”,通信双方同一层之间的交互所遵循的约定叫做“协议”。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SpringAI集成MCP
可以自己尝试实现(销毁原来的 Stdio、建立新的 Stdio,不推荐),由于多个用户存在 Stdio 可能会造成并发竞争因此不推荐。以使用百度地图提供的 MCP 服务为例,演示如何使用 Stdio 的方式调用公用的 MCP Server。系统提示词,由调用方传递用户数据:可以将用户信息传递到工具中,但是可以随意去查询其他用户的数据,不可取。在使用其他开发者提供好的 MCP 服务时,仅仅引入 MCP 的客户端依赖即可。首先,对 MCP 进行配置,Stdio 的配置方式有两种。原创 2025-08-18 23:13:18 · 1359 阅读 · 0 评论 -
SpringAI实现Reread(Advisor)
Advisor 是 SpringAI 基于 AOP 机制实现与大模型对话过程的增强、拦截、修改等功能的关键组件。所有的增强通知都需要实现 Advisor 接口。Advisor:顶级接口,继承了 Ordered,可以定义拦截器(Advisor)的顺序。ChatClientRequest:表示由 ChatClient 处理的请求,最终用于构建要发送到 LLM 的Prompt。ChatClientResponse:表示由 ChatClient 返回的响应。原创 2025-08-11 22:03:54 · 953 阅读 · 0 评论 -
SpringBoot 发送邮件
邮件功能虽非核心业务,但在注册验证、通知提醒、工单系统等系统中却非常关键。良好的邮件架构不仅能提升用户体验,也能让系统具备更强的扩展性和稳定性。添加邮件日志记录、异步发送等能力,可继续在此基础上构建更完善的邮件服务模块。原创 2025-07-28 23:07:25 · 880 阅读 · 1 评论 -
SpringAI之多模态
多模态是指表达或感知事物的方式,例如视觉、听觉、嗅觉。对应的信息传递媒介可以是不同类型的数据,如文本、图像、声音、视频等。多模态就是从多个模态表达或感知事物。大部分情况与大模型交互都是基于普通文本输入,只有需要解析图片等其他类型数据时才会用到多模态模型。deepseekqwen-plus等模型都是纯文本模型,在 Ollama 和百炼平台,也能找到很多多模态模型。以 Ollama 为例,在搜索时点击 Vision,就能找到支持图像识别的模型:在阿里云百炼平台也一样:阿里云百炼平台的。原创 2025-07-24 00:31:03 · 525 阅读 · 0 评论 -
SpringAI之RAG
要解决大模型的知识限制问题,其实并不复杂。解决的思路就是给大模型外挂一个知识库,可以是专业领域知识,也可以是企业私有的数据。不过,知识库不能简单的直接拼接在提示词中。因为通常知识库数据量都是非常大的,而大模型的上下文是有大小限制的。那怎么办?思路很简单,庞大的知识库中与用户问题相关的其实并不多。所以,我们需要想办法从庞大的知识库中找到与用户问题相关的一小部分,组装成提示词,发送给大模型就可以了。那么问题来了,该如何从知识库中找到与用户问题相关的内容呢?原创 2025-07-23 00:25:15 · 956 阅读 · 0 评论 -
Spring AI开发智能客服(Tool calling)
由于 AI 擅长的是非结构化数据的分析,如果需求中包含严格的逻辑校验或需要读写数据库,纯 Prompt 模式就难以实现了。(也叫作)是人工智能应用中的一种常见模式,它允许模型与一组 API 或工具进行交互,从而增强其功能。主要用于从外部来源(数据库、Web 服务、文件等)检索信息回答原本无法回答的问题,或用于在软件系统中采取行动、比如发送电子邮箱、在数据库中创建新记录等。接下来通过一个智能客服的案例来演示。根据条件筛选和查询课程查询校区列表新增试听预约单声明式地使用 Tool 注解;原创 2025-07-18 22:30:00 · 1162 阅读 · 1 评论 -
Spring AI之Prompt开发
模型开发有四种模式,其中一种就是纯 Prompt 模式,只要我们设定好 System 提示词,就能让大模型实现很强大的功能。接下来就看看如何才能写好提示词。原创 2025-07-17 20:45:00 · 1499 阅读 · 0 评论 -
Spring AI快速入门
SpringAI整合了全球(主要是国外)的大多数大模型,而且对于大模型开发的三种技术架构都有比较好的封装和支持,开发起来非常方便。不同的模型能够接收的输入类型、输出类型不一定相同,SpringAI 根据模型的输入和输出类型不同对模型进行了分类:大模型应用开发大多数情况下使用的都是基于对话模型(Chat Model),也就是输出结果为自然语言或代码的模型。原创 2025-07-16 23:21:22 · 1380 阅读 · 0 评论 -
Activiti整合Spring(Boot)
依赖如下:2 添加整合的配置文件添加一个 Spring 的配置文件,并在其中完成 Activiti 的整合操作:databaseSchemaUpdate 的取值注意:通过方法的执行我们能够发现相关的表结构在数据库中完成了创建,说明 Activiti 和 Spring 的整合成功。Activiti7 发布正式版本之后,它和 SpringBoot 2.x 已经完全整合开发了依赖如下:2 修改配置文件配置文件即参数说明:3 整合SpringSecurity因为 Activiti7 和 Spring原创 2025-06-22 18:42:50 · 1126 阅读 · 0 评论 -
SpringMVC的全注解开发
时,容器就会自动发现我们自己的类, 在该类中我们就可以配置 Spring 和 SpringMVC 的入口了。跟之前全注解开发思路一致,xml配置文件使用核心配置类替代,xml中的标签使用对应的注解替代。参照Spring的ContextLoaderListener加载核心配置类的做法,定义了一个。实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作;目前,几乎消除了配置文件,但是web工程的入口还是使用的。接口,实现了该接口后,在对 应的类加载路径的。的类,Spring又提供了一个。原创 2024-12-25 12:30:00 · 565 阅读 · 0 评论 -
SpringMVC的响应处理
在讲解SringMVC接收请求数据时,客户端提交的Json格式的字符串,也是使用Jackson进行的手动转换成JavaBean ,可以当我们使用了@RequestBody时,直接用JavaBean就接收了Json格式的数据。@ResponseBody注解使用优化:在进行前后端分离开发时,Controller的每个方法都是直接回写数据的,所以每个方法上都得写@ResponseBody。,可以通过 @ResponseBody 注解显示告知此处的返回值不要进行视图处理,是要以响应体的方式处理的。原创 2024-12-25 12:00:00 · 1346 阅读 · 0 评论 -
Spring整合第三方框架——自定义命名空间解析原理
1、Schema 文件(XSD 文件)定义自定义标签的语法和结构。用于约束配置文件中自定义标签的合法性。负责解析自定义命名空间的顶级标签。将自定义标签解析为对应的。负责解析具体的标签内容,将其转化为。4、Spring 提供的解析框架Spring 通过和文件注册解析逻辑。原创 2024-12-24 11:45:00 · 1028 阅读 · 0 评论 -
SpringMVC的请求处理
手动将 RequestMappingHandlerMapping 也注册到 SpringMVC 容器中就可以了,这样 DispatcherServlet 在进行初始化时,就会从容器中同时获得 RequestMappingHandlerMapping 存储到 DispatcherServlet 中名为 handlerMappings 的 List 集合中,对@RequestMapping 注解进行解析。这么复杂繁琐的配置,是不是看上去有点头大?原创 2024-12-24 12:00:00 · 2023 阅读 · 0 评论 -
SpringMVC简介
SpringMVC是一个基于Spring开发的MVC轻量级框架,Spring3.0后发布的组件,SpringMVC和Spring可以无 缝整合,使用DispatcherServlet作为前端控制器,且内部提供了处理器映射器、处理器适配器、视图解析器等组 件,可以简化JavaBean封装,Json转化、文件上传等操作。以前单独就是一个框架与spring平级,现在只是作为一个spring的组件。原创 2024-12-23 12:00:00 · 1863 阅读 · 0 评论 -
Spring整合Web环境
我们能想到的 Spring 框架自然也会想到,Spring其实已经为我们定义 好了一个ContextLoaderListener,使用方式跟我们上面自己定义的大体一样,但是功能要比我们强百倍,所以 ,遵循Spring “拿来主义” 的精神,我们直接使用Spring提供的就可以了。Spring容器也重复被创建了,不能每次想从容器中获得一个Bean都得先创建一次容器,这样肯定是不允许。如果需要使用这种方式封装框架,还需要考虑上述代码有多处写死的部分,及其冗余,最好定义一个工具类进行封装。原创 2024-12-22 12:00:00 · 1318 阅读 · 0 评论 -
Spring基于XML配置声明式事务
基于 XML 配置声明式事务适用于老项目或对注解支持有限的环境,但在现代开发中,更多项目倾向于使用注解(如)来实现声明式事务。等价的注解配置文件import com/*** 配置数据源} /*** 配置 SqlSessionFactory} /*** 配置事务管理器。原创 2024-12-21 12:30:00 · 1223 阅读 · 0 评论 -
SpringAOP模拟实现
MethodInvocation 的编程技巧在实现拦截器、过滤器时能用上。代理对象调用流程如下(以 JDK 动态代理实现为例)图中不同颜色对应一次环绕通知或目标的调用起始至终结。获得 MethodInterceptor 链。原创 2024-11-18 18:31:30 · 884 阅读 · 0 评论 -
SpringBoot健康监控
每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。SpringBoot Admin 有两个角色,客户端(Client)和服务端(Server)。会发现内容多了,里面的地址分别都可以访问,记录的是对应的健康监测的信息。1、创建 admin_server 模块,引入依赖。3、暴露所有监控信息为HTTP。1、在任意服务里面引入依赖。能够搭建 可视化监控平台。原创 2024-11-05 16:24:08 · 980 阅读 · 0 评论 -
Spring Retry框架
Retry重试框架,支持AOP切入的方式使用,支持注解:重试次数、重试延迟、重试触发条件、重试的回调方法等功能来实现重试机制。项目中我们可以通过两种不同的方式使用SpringRetrySpringRetry重试功能,一种是@Retryable注解的方式,另一种是方式。合理使用重试机制能够增强系统的健壮性,但需要根据实际情况配置重试策略,避免因配置不当引起的性能问题。除此之外,还有一些其他的注解也可以完成重试的功能,比如库。原创 2024-10-25 01:21:06 · 1688 阅读 · 1 评论 -
SpringBoot整合HTTPS
HTTPS 是安全套接层超文本传输协议,可以保证网站的信息从用户浏览器到服务器之间的传输是高强度加密传输的,是不会被第三方窃取和篡改的,还能避免网站被劫持而插入广告等,防止被钓鱼网站攻击,从而保护网站的安全性和完整性。在 HTTP 网站数据以明文方式传输,客户的隐私极容易被盗取和泄露,而部署 SSL 证书,数据以 HTTPS 加密传输,可以保护通信不被第三方监听和窃取,从而保护用户隐私及安全。需要注意的是,在实际生产环境中,还需要配置服务器的防火墙、负载均衡等相关组件,保证。分别指定证书的类型和别名。原创 2024-10-17 14:07:37 · 2561 阅读 · 0 评论 -
Spring封装InfluxDB持久层
注意:本封装组件适用于1.X对于2.X由于认证方式的改变不能被正确兼容。原创 2024-10-13 02:49:54 · 1466 阅读 · 0 评论 -
Spring 的事务支持
TransactionTemplate提供了一种在代码中进行编程式事务管理的方式,使开发人员能够在方法级别定义事务的开始和结束点。通过配置事务管理器并使用TransactionTemplate,我们可以方便地执行事务操作,并根据需要设置传播行为和隔离级别。希望本文能够帮助你更好地理解和应用Spring的事务管理功能。Spring事务管理的亮点在于声明式事务管理,它允许我们通过声明的方式,在IoC配置中指定事务的边界和事务属性,Spring会自动在指定的事务边界上应用事务属性。原创 2024-08-21 14:21:37 · 1517 阅读 · 0 评论 -
Spring 的 Aop 整体流程剖析
Spring Framework 的两大核心特性中,除了IOC,面向切面编程(AOP)也非常重要。AOP是OOP的补充,OOP的核心是对象,AOP的核心是切面(Aspect)。AOP可以在不修改功能代码本身的前提下,使用运行时动态代理技术对已有代码逻辑进行增强。AOP可以实现组件化、可插拔式的功能扩展,通过简单配置即可将功能增强到指定的切人点。AOP 底层实现方式之一是代理,由代理结合通知和目标,提供增强功能,常用的实现有两种:Cglib 代理和 jdk 动态代理。——在这篇结构型模式中有对这两种代理实现详原创 2024-08-20 14:38:55 · 879 阅读 · 0 评论 -
Spring 循环依赖解决方案
构造器的循环依赖单例模式下的 setter /Autowired循环依赖非单例循环依赖Spring 通过提前暴露单例 bean的机制来处理属性注入中的循环依赖。对于构造器注入、非单例循环依赖,Spring 无法解决循环依赖问题,需要开发者注意设计避免循环依赖的情况。实现原理是采用三级缓存保存提前暴露的单例 bean,且用 Set集合记录正在创建中的 bean 对象来判断是否产生了循环依赖。需要理解三级缓存中各自的作用即工作流程。原创 2024-08-14 22:08:18 · 2010 阅读 · 3 评论 -
SpringBean生命周期
Spring Bean 是由 Spring 容器管理的对象。它们是应用程序中依赖注入的核心,通过 Spring 配置文件或注解声明,由 Spring 容器负责其创建、初始化、使用和销毁。原创 2024-08-10 18:39:17 · 1181 阅读 · 2 评论 -
SPI 机制
SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。SPI 的来源其实与设计模式中的依赖倒转原则有关。依赖倒转原则中有提到,应该依赖于接口而不是实现类,但接口最终要有实现类落地。如果程序因业务调整,需要替换某个接口的实现类,就不得不改动实现类的创建,也就是修改源码。SPI机制的出现解决类这个问题,它通过一种“服务寻找”的机制,动态地加载接口/抽象类的具体实现类。原创 2024-08-07 21:25:23 · 1026 阅读 · 3 评论 -
@Async注解失效的9种场景
today面试被问@Async注解失效问题。没碰到过,想的是否是内部的线程池的问题(猜的)。@Slf4j@Service@Async个人感觉这个问题还是比较有意思的,面试被问答不上来就没意思了。原创 2024-07-22 12:12:38 · 937 阅读 · 3 评论 -
Spring 的 Aop 支持
AOP,Aspect Oriented Programming,面向切面编程,是对面向对象编程OOP的升华。而AOP是横向的对不同事物的抽象,属性与属性、方法与方法、对象与对象都可以组成一个切面,而用这种思维去设计编程的方式叫做面向切面编程。AOP的核心是切面(Aspect)。AOP可以在不修改功能代码本身的前提下,使用运行时动态代理技术对已有代码逻辑进行增强。AOP可以实现组件化、可插拔式的功能扩展,通过简单配置即可将功能增强到指定的切入点。原创 2024-04-30 21:16:59 · 1000 阅读 · 0 评论 -
Spring事务失效问题
这种方式的本质是利用Spring的AOP代理机制,确保调用事务方法时,是由Spring的AOP容器进行代理的调用。在某些复杂的场景下,如果以上方法都不适用,可以考虑使用Spring AOP直接对需要事务支持的方法进行增强,通过编程的方式动态地为方法调用提供事务支持。注解,但是你在获取某个对象的时候,可能并不是获取的Spring管理的对象,有可能是其它方式创建的。通过上述方法,可以有效解决Spring中非事务方法调用事务方法导致的事务失效问题,确保事务的正确执行。方法,会开启一个事务,可以成为外部事务。原创 2024-04-03 17:10:21 · 1857 阅读 · 0 评论 -
Spring Validation
在现代Web应用开发中,确保用户输入数据的正确性和合法性是至关重要的。Spring Validation作为Spring框架中的一个重要组成部分,提供了一套强大而灵活的机制来处理数据验证。本文将深入探讨Spring Validation的各个方面,包括其工作原理、核心组件、常用注解、高级特性以及最佳实践。原创 2024-03-16 22:11:05 · 2001 阅读 · 0 评论 -
开发反应式API
当 Spring 团队在思考如何向 Web 层添加反应式编程模型时,很快就发现如果不在Spring MVC中做大量工作,就很难实现这一点。这涉及在代码中产生分支以决定是否要以反应式的方式来处理请求。本质上,这样做会将两个Web框架打包成一个,并用if 语句来区分反应式和非反应式。与其将反应式编程模型硬塞进Spring MVC 中,还不如创建一个单独的反应式 web框架,并尽可能多地借鉴 Spring MVC。Spring WebFlux 应运而生。spring 定义的完整开发技术站如图。原创 2024-03-15 22:04:19 · 1447 阅读 · 0 评论 -
Spring Security自定义认证授权过滤器
如果对 Spring Security 了解不够请看这篇。SpringSecurity 内置的认证过滤器是基于post请求且为form表单的方式获取认证数据的,那如何接收前端Json异步提交的数据据实现认证操作呢?显然,我们可仿照UsernamePasswordAuthentionFilter类自定义一个过滤器并实现认证过滤逻辑;import com/*** 认证过滤器/*** 自定义构造器,传入登录认证的url地址} /*** 尝试去认证的方法。原创 2024-03-11 20:52:08 · 2000 阅读 · 2 评论 -
反应式编程(响应式编程)
反应式编程是一种可以替代命令式编程的编程范式。这种可替代性得以存在的原因在于:反应式编程解决了命令式编程中的一些限制。理解这些限制,有助于你更好地理解反应式编程模型的优点。原创 2024-02-10 22:29:45 · 2208 阅读 · 0 评论 -
Spring Task
是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑,我们主要了解使用注解的方式。定位:定时任务框架作用:定时自动执行某段Java代码为什么要在Java程序中使用Spring Task?1). 信用卡每月还款提醒2). 银行贷款每月还款提醒3). 火车票售票系统处理未支付订单4). 入职纪念日为用户发送通知强调:只要是需要定时处理的场景都可以使用。原创 2024-02-05 21:21:17 · 1015 阅读 · 0 评论 -
Spring Cache
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。原创 2024-01-27 09:41:58 · 1195 阅读 · 0 评论 -
Spring全局异常处理
在Spring框架中,全局异常处理主要是通过(或其特化形式)注解和注解来实现的。这种机制能够捕捉到控制器(或)中抛出的异常,并允许你定义全局的处理逻辑。在实际的应用中,全局异常处理通常会涉及到更复杂的逻辑,如记录详细的错误日志、返回自定义错误对象、集成错误监控服务等。这些处理也都可以通过全局异常处理器来实现和集成。原创 2024-01-15 08:09:24 · 1343 阅读 · 0 评论 -
Spring集成
Spring Integration 是众多集成模式的现成实现,这些模式在Gregor Hohpe 和 Bobby Woolf编写的Enterprise Integration Patterns (Addison-Wesley,2003 年)中进行了归类。每个模式都实现为一个组件,消息会通过该组件在管道中传递数据。借助 Spring 配置,可以将这些组件组装成一个管道,数据可以通过这个管道来流动。我们从定义一个简单的集成流开始,这个流包含了Spring Integration 的众多特性和特点。原创 2024-01-14 08:20:11 · 1838 阅读 · 0 评论 -
JMS消息发送
JMS是一个Java标准,定义了使用消息代理()的通用API,在2001年提出。长期以来,JMS一直是Java中实现异步消息的首选方案。在JMS出现之前每个消息代理都有其私有的API,这就使得不同代理之间的消息代码很难互通。但是借助JMS所有遵从规范的实现都使用通用的接口,这就类似于JDBC为数据库操作提供了通用的接口。Spring通过基于模板的抽象为JMS功能提供了支持,这个模板就是。借助,能够非常容易地在消息生产方发送队列和主题消息,消费消息的一方也能够非常容易地接收这些消息。Spring。原创 2024-01-06 16:18:47 · 1854 阅读 · 0 评论 -
Spring消费REST服务
Spring应用除了提供对外API之外,同时要对另一个应用的API发起请求。实际上,在微服务领域,这正变得越来越普遍。因此,花点时间研究一下如何使用Spring与RESTAPI交互是非常值得的。Spring应用可以采用多种方式来消费RESTAPI。:由Spring核心框架提供的简单、同步REST客户端。Traverson:对 Spring RestTemplate 的包装,由Spring HATEOAS 提供的支持超链接、同步的 REST客户端,其灵感来源于同名的 JavaScript库。原创 2024-01-04 19:50:36 · 998 阅读 · 0 评论 -
Spring整合RabbitMq
多个消费者绑定到一个队列,可以加快消息处理速度,同一条消息只会被一个消费者处理。通过设置prefetch来控制消费者预取的消息数量。原创 2023-12-16 18:22:27 · 1154 阅读 · 0 评论