spring-boot
文章平均质量分 91
duration~
将语言当做协议,聊天当做通信,将说话的内容当做数据。上下层之间进行交互时所遵循的约定叫做“接口”,通信双方同一层之间的交互所遵循的约定叫做“协议”。
展开
-
Spring 的事务支持
TransactionTemplate提供了一种在代码中进行编程式事务管理的方式,使开发人员能够在方法级别定义事务的开始和结束点。通过配置事务管理器并使用TransactionTemplate,我们可以方便地执行事务操作,并根据需要设置传播行为和隔离级别。希望本文能够帮助你更好地理解和应用Spring的事务管理功能。Spring事务管理的亮点在于声明式事务管理,它允许我们通过声明的方式,在IoC配置中指定事务的边界和事务属性,Spring会自动在指定的事务边界上应用事务属性。原创 2024-08-21 14:21:37 · 1002 阅读 · 0 评论 -
Spring 的 Aop 支持
Spring Framework 的两大核心特性中,除了IOC,面向切面编程(AOP)也非常重要。AOP是OOP的补充,OOP的核心是对象,AOP的核心是切面(Aspect)。AOP可以在不修改功能代码本身的前提下,使用运行时动态代理技术对已有代码逻辑进行增强。AOP可以实现组件化、可插拔式的功能扩展,通过简单配置即可将功能增强到指定的切人点。AOP 底层实现方式之一是代理,由代理结合通知和目标,提供增强功能,常用的实现有两种:Cglib 代理和 jdk 动态代理。——在这篇结构型模式中有对这两种代理实现详原创 2024-08-20 14:38:55 · 688 阅读 · 0 评论 -
Spring 循环依赖解决方案
构造器的循环依赖单例模式下的 setter /Autowired循环依赖非单例循环依赖Spring 通过提前暴露单例 bean的机制来处理属性注入中的循环依赖。对于构造器注入、非单例循环依赖,Spring 无法解决循环依赖问题,需要开发者注意设计避免循环依赖的情况。实现原理是采用三级缓存保存提前暴露的单例 bean,且用 Set集合记录正在创建中的 bean 对象来判断是否产生了循环依赖。需要理解三级缓存中各自的作用即工作流程。原创 2024-08-14 22:08:18 · 897 阅读 · 2 评论 -
@Async注解失效的9种场景
today面试被问@Async注解失效问题。没碰到过,想的是否是内部的线程池的问题(猜的)。@Slf4j@Service@Async个人感觉这个问题还是比较有意思的,面试被问答不上来就没意思了。原创 2024-07-22 12:12:38 · 710 阅读 · 3 评论 -
SpringBean生命周期
Spring Bean 是由 Spring 容器管理的对象。它们是应用程序中依赖注入的核心,通过 Spring 配置文件或注解声明,由 Spring 容器负责其创建、初始化、使用和销毁。原创 2024-08-10 18:39:17 · 983 阅读 · 1 评论 -
SPI 机制
SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。SPI 的来源其实与设计模式中的依赖倒转原则有关。依赖倒转原则中有提到,应该依赖于接口而不是实现类,但接口最终要有实现类落地。如果程序因业务调整,需要替换某个接口的实现类,就不得不改动实现类的创建,也就是修改源码。SPI机制的出现解决类这个问题,它通过一种“服务寻找”的机制,动态地加载接口/抽象类的具体实现类。原创 2024-08-07 21:25:23 · 911 阅读 · 3 评论 -
Spring事务失效问题
这种方式的本质是利用Spring的AOP代理机制,确保调用事务方法时,是由Spring的AOP容器进行代理的调用。在某些复杂的场景下,如果以上方法都不适用,可以考虑使用Spring AOP直接对需要事务支持的方法进行增强,通过编程的方式动态地为方法调用提供事务支持。注解,但是你在获取某个对象的时候,可能并不是获取的Spring管理的对象,有可能是其它方式创建的。通过上述方法,可以有效解决Spring中非事务方法调用事务方法导致的事务失效问题,确保事务的正确执行。方法,会开启一个事务,可以成为外部事务。原创 2024-04-03 17:10:21 · 1091 阅读 · 1 评论 -
Spring Validation
在现代Web应用开发中,确保用户输入数据的正确性和合法性是至关重要的。Spring Validation作为Spring框架中的一个重要组成部分,提供了一套强大而灵活的机制来处理数据验证。本文将深入探讨Spring Validation的各个方面,包括其工作原理、核心组件、常用注解、高级特性以及最佳实践。原创 2024-03-16 22:11:05 · 1536 阅读 · 0 评论 -
开发反应式API
当 Spring 团队在思考如何向 Web 层添加反应式编程模型时,很快就发现如果不在Spring MVC中做大量工作,就很难实现这一点。这涉及在代码中产生分支以决定是否要以反应式的方式来处理请求。本质上,这样做会将两个Web框架打包成一个,并用if 语句来区分反应式和非反应式。与其将反应式编程模型硬塞进Spring MVC 中,还不如创建一个单独的反应式 web框架,并尽可能多地借鉴 Spring MVC。Spring WebFlux 应运而生。spring 定义的完整开发技术站如图。原创 2024-03-15 22:04:19 · 1306 阅读 · 0 评论 -
Spring Security自定义认证授权过滤器
如果对 Spring Security 了解不够请看这篇。SpringSecurity 内置的认证过滤器是基于post请求且为form表单的方式获取认证数据的,那如何接收前端Json异步提交的数据据实现认证操作呢?显然,我们可仿照UsernamePasswordAuthentionFilter类自定义一个过滤器并实现认证过滤逻辑;import com/*** 认证过滤器/*** 自定义构造器,传入登录认证的url地址} /*** 尝试去认证的方法。原创 2024-03-11 20:52:08 · 1431 阅读 · 2 评论 -
密码加密方式
SpringSecurity提供了实现PasswordEncoder接口的密码加密工具类:BcryptPasswordEncoder,该类基于Bcrypt强哈希算法来加密密码,更加安全;Bcrypt强哈希方法每次加密相同的明文得到的密文结果都不一样,这样即使数据库泄露,黑客也很难破解密码;1)Bcrypt加密一般在注册用户时,Bcrypt使用SHA-256加密算法+随机盐值+秘钥(明文密码)进行加密处理,得到的密文存入数据库中;@Test} else {生成加密的代码。原创 2024-03-11 12:22:25 · 1437 阅读 · 0 评论 -
认证授权与JWT
认证是为了保护身份的合法性,授权则是为了更细粒度的对数据进行划分,授权是在认证通过的前提下发生的。控制不同的用户能够访问不同的资源。授权是用户认证通过后根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。例如视频网站的VIP用户,可以查看到普通用户看不到的资源信息。 如何实现授权?业界通常基于RBAC模型(Role-Based Access Control -> 基于角色的访问控制)实现授权。原创 2024-03-11 08:42:07 · 1100 阅读 · 0 评论 -
实现HttpServletRequest下多次获取流数据
众所周知request的输入流只能读取一次,不能重复读取。而在`HttpServletRequest`中,获取请求体数据的流(通过getInputStream()方法)默认只能被读取一次。一旦读取后,流将处于末尾状态,再次尝试读取会返回EOF(文件结束符),无法重新获取原始数据。如果在过滤器或者拦截器中有业务需求对输入流进行一些其他操作,那么此处读取过后再到`controller`层就会报错,提示IO异常,本次的需求就是在拦截器中获取请求体中的数据。如果多次调用会出现如下错误【如果拦截器中将请求体原创 2024-03-08 17:49:41 · 2017 阅读 · 0 评论 -
反应式编程(响应式编程)
反应式编程是一种可以替代命令式编程的编程范式。这种可替代性得以存在的原因在于:反应式编程解决了命令式编程中的一些限制。理解这些限制,有助于你更好地理解反应式编程模型的优点。原创 2024-02-10 22:29:45 · 1434 阅读 · 1 评论 -
Spring Task
是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑,我们主要了解使用注解的方式。定位:定时任务框架作用:定时自动执行某段Java代码为什么要在Java程序中使用Spring Task?1). 信用卡每月还款提醒2). 银行贷款每月还款提醒3). 火车票售票系统处理未支付订单4). 入职纪念日为用户发送通知强调:只要是需要定时处理的场景都可以使用。原创 2024-02-05 21:21:17 · 930 阅读 · 0 评论 -
微信支付介绍
支付大家应该都不陌生了,在现实生活中经常购买商品并且使用支付功能来付款,在付款的时候可能使用比较多的就是微信支付和支付宝支付了。在本文中,将介绍微信支付这种支付方式。要实现微信支付就需要注册微信支付的一个商户号,这个商户号是必须要有一家企业并且有正规的营业执照。只有具备了这些资质之后,才可以去注册商户号,才能开通支付权限。个人不具备这种资质,所以我们在学习微信支付时,最重要的是了解微信支付的流程,并且能够阅读微信官方提供的接口文档,能够和第三方支付平台对接起来就可以了。本次选择前端为小程序,后端。原创 2024-02-02 18:52:21 · 1056 阅读 · 1 评论 -
地址簿功能代码
地址簿,指的是消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个。原创 2024-01-29 14:39:14 · 943 阅读 · 0 评论 -
Spring Cache
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。原创 2024-01-27 09:41:58 · 1047 阅读 · 0 评论 -
HttpClient
HttpClient是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。发送HTTP请求接收响应数据为什么要在Java程序中发送Http请求?有哪些应用场景呢?当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时。原创 2024-01-22 18:21:16 · 901 阅读 · 0 评论 -
Mybatis
什么是MyBatis?MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis本是 Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。在上面我们提到了两个词:一个是持久层,另一个是框架。持久层:指的是就是数据访问层(dao),是用来操作数据库的。框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础上进行软件开发更加高效、规范、通用、可拓展。原创 2024-01-15 20:50:37 · 1036 阅读 · 0 评论 -
Spring全局异常处理
在Spring框架中,全局异常处理主要是通过(或其特化形式)注解和注解来实现的。这种机制能够捕捉到控制器(或)中抛出的异常,并允许你定义全局的处理逻辑。在实际的应用中,全局异常处理通常会涉及到更复杂的逻辑,如记录详细的错误日志、返回自定义错误对象、集成错误监控服务等。这些处理也都可以通过全局异常处理器来实现和集成。原创 2024-01-15 08:09:24 · 1104 阅读 · 0 评论 -
Spring集成
Spring Integration 是众多集成模式的现成实现,这些模式在Gregor Hohpe 和 Bobby Woolf编写的Enterprise Integration Patterns (Addison-Wesley,2003 年)中进行了归类。每个模式都实现为一个组件,消息会通过该组件在管道中传递数据。借助 Spring 配置,可以将这些组件组装成一个管道,数据可以通过这个管道来流动。我们从定义一个简单的集成流开始,这个流包含了Spring Integration 的众多特性和特点。原创 2024-01-14 08:20:11 · 1560 阅读 · 0 评论 -
JMS消息发送
JMS是一个Java标准,定义了使用消息代理()的通用API,在2001年提出。长期以来,JMS一直是Java中实现异步消息的首选方案。在JMS出现之前每个消息代理都有其私有的API,这就使得不同代理之间的消息代码很难互通。但是借助JMS所有遵从规范的实现都使用通用的接口,这就类似于JDBC为数据库操作提供了通用的接口。Spring通过基于模板的抽象为JMS功能提供了支持,这个模板就是。借助,能够非常容易地在消息生产方发送队列和主题消息,消费消息的一方也能够非常容易地接收这些消息。Spring。原创 2024-01-06 16:18:47 · 1510 阅读 · 0 评论 -
消费REST服务
Spring应用除了提供对外API之外,同时要对另一个应用的API发起请求。实际上,在微服务领域,这正变得越来越普遍。因此,花点时间研究一下如何使用Spring与RESTAPI交互是非常值得的。Spring应用可以采用多种方式来消费RESTAPI。:由Spring核心框架提供的简单、同步REST客户端。Traverson:对 Spring RestTemplate 的包装,由Spring HATEOAS 提供的支持超链接、同步的 REST客户端,其灵感来源于同名的 JavaScript库。原创 2024-01-04 19:50:36 · 888 阅读 · 0 评论 -
RabbitMq交换机详解
交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列描述下Direct交换机与Fanout交换机的差异?Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列如果多个队列具有相同的RoutingKey,则与Fanout功能类似。原创 2023-12-17 15:42:10 · 3025 阅读 · 0 评论 -
RabbitMq基本使用
多个消费者绑定到一个队列,可以加快消息处理速度,同一条消息只会被一个消费者处理。通过设置prefetch来控制消费者预取的消息数量。原创 2023-12-16 18:22:27 · 595 阅读 · 0 评论 -
WebSocket开发
WebSocket 是互联网项目中画龙点睛的应用,可以用于消息推送、站内信、在线聊天等业务。WebSocket 是一种基于 TCP 的新网络协议,它是一种持久化的协议,实现了全双工通信,可以让服务器主动发送消息给客户端。在 WebSocket 出现之前,要保持消息更新和推送一般采用轮询的方式,例如,开启一个服务进程每隔一段时间去发送请求给另外一个服务,以此获取最新的资源信息。这里都很阻塞请求,性能非常差,也会占用资源。原创 2023-12-15 11:11:20 · 1654 阅读 · 0 评论 -
Oauth2.0 认证
Oauth2.0 是非常流行的网络授权表准,已经广泛应用在全球范围内,比较大的公司,如腾讯等都有大量的应用场景。原创 2023-12-09 11:07:06 · 1686 阅读 · 0 评论 -
Shrio 安全框架
几乎所有涉及用户的系统都需要进行权限管理,权限管理涉及到一个系统的安全。Spring Boot 的安全框架整合方案中还有一个璀璨的明珠:Shrio。Shiro是一款由Java 编写的安全框架,功能强大,入手容易。Shiro 提供了一套完的RABC模式的授权认证体系,可以对密码进行加密,并完成安全的会话管理。与SpringSecurity 相比显得功能较少,但是对于追求“小而美”的解决方案的开发者和项目来说Shiro使用起来更加得心应手。用于身份验证以及登录,检查用户是否拥有相应的角色权限。原创 2023-12-08 19:10:04 · 1492 阅读 · 0 评论 -
SpringSecurity安全授权
如果我们不想使用默认提供的权限认证,或面对复杂的业务需要时,可能需要采取自定义认证方式实现权限认证。自定义一个类//获取当前用户的权限//判断用户权限集合中是否存在 authority在需要使用的 controller 前加上 @PreAuthorize("@ex.hasAutority('dba')") 表示访问前的验证补充是 Spring Security 的关键部分,用于配置 Web 安全性的详细内容。以下是在 Spring Security 中常用的。原创 2023-12-07 22:43:52 · 1459 阅读 · 0 评论 -
Spring Boot 单元测试
单元测试是软件开发中的一种关键测试类型,它是指对软件中的最小可测试单元进行检查和验证。对于面向对象编程,最小单元就是方法,独立的函数或过程也可以是最小单元。在 Java 中,通常一个单元测试属于一种特定的测试工具框架,如 JUnit,它们可以很容易地插入到自动化构建过程或持续集成工具中。单元测试的主要目标是隔离软件系统的各部分,并逐个测试。这将确保每个部分都按照预期工作。单元测试有助于提高软件质量,而且也使得代码在修改后更容易维护。原创 2023-12-05 08:00:00 · 6870 阅读 · 0 评论 -
Spring 多数据源搭建
多数据源搭建提供了灵活性、性能优化、隔离性和安全性方面的优势。它使应用程序能够更好地适应不同的需求,并在处理数据时提供更好的性能和可扩展性。原创 2023-12-02 07:00:00 · 1099 阅读 · 0 评论 -
Spring Data JPA 整合
JPA 全称是 Java Persistence API ,意思是 Java 持久层 API 接口。而 Spring Data JPA 是一套 ORM(对象关系映射)标准,关于这套标准的实现 ORM 框架很多,如大名鼎鼎的 Hibernate 。实际上是先有 Hibernate ,再有的 JPA 标准 。而这里推荐的是 Spring Boot 的实现,也就是 Spring Data。原创 2023-12-01 07:30:00 · 1133 阅读 · 0 评论 -
博客RESTful API 接口开发
采用 SpringBoot + Druid + MyBatis + Redis +Tomcat 架构简单搭建的博客系统原创 2023-11-29 08:15:00 · 1045 阅读 · 0 评论 -
JPA 方式实现 RESTful API
除了常见的方式实现 RESTful API,还有一种简单的方式实现 RESTful API,那就是用 JPA 方式。首先介绍一下 JPA,它是 Sun 公司推荐的 JAVA 持久化规范,为了简化 ORM 技术而产生。需要注意的是,他只是一套规范,不是一套具体的框架,只要符合这个规范的框架都可以被称为 JPA 框架。除了写在文件中,还可以写在代码当中,只需编写一个类实现 RepositoryRestConfigurer 接口,代码的优先级高于文件,如果有这个文件,那么以这个文件的设置为准。原创 2023-11-26 15:31:22 · 595 阅读 · 1 评论 -
拦截器的使用
拦截器(Interceptor)是一种在应用程序中用于干预、修改或拦截请求和响应的组件,是AOP 编程的一种实践,和过滤器一样都是一种具体的AOP实现。它可以在请求被发送到目标处理程序之前或之后,对请求进行预处理或对响应进行后处理。拦截器通常用于以下目的:认证和授权:拦截器可以对请求进行身份验证和权限检查,确保只有经过认证和授权的用户才能访问特定的资源或执行特定的操作。日志记录和性能监控:拦截器可以用于记录请求和响应的日志,以便进行故障排查、性能监控和分析。原创 2023-11-24 08:00:00 · 1344 阅读 · 0 评论 -
文件的上传
文件上传方便用户将本地文件传输到互联网上的应用程序或网站中,实现信息的共享和传递。它不仅提供了便捷的数据传输方式,还增强了用户的体验,使用户能够轻松分享个人创作、照片、视频、文档等内容。同时,文件上传也促进了远程协作和合作,使得团队成员可以方便地分享和访问文件,提高工作效率,本次将通过使用spring-boot实现文件上传与下载的功能。原创 2023-11-23 08:15:00 · 1098 阅读 · 0 评论 -
通用返回类型定义
Data。原创 2023-11-22 15:03:14 · 255 阅读 · 0 评论 -
Json数据格式
json比较可读,通过键值对返回。实现通常有两种方式:一种是自己来构造,也就是用一个对象存储数据,在最后输出时将其json字符串化;第二种是使用 @RestController 注解实现json数据返回。原创 2023-11-21 20:49:53 · 533 阅读 · 0 评论 -
加载SSL证书
配置类控制类启动类原创 2023-11-21 20:38:02 · 78 阅读 · 0 评论