Spring
文章平均质量分 78
你这个代码我看不懂
以后我们就是朋友了,请多关照!
展开
-
SingleFlight模式
通过使用和,我们可以在Java中实现SingleFlight模式,有效地减少对同一资源的重复请求,提高系统性能。原创 2024-08-23 17:07:57 · 256 阅读 · 0 评论 -
Spring Cache sync属性
表示同步缓存,防止缓存击穿。当多个线程同时请求同一个缓存键并且该键在缓存中不存在时,只有一个线程会执行缓存方法,其他线程会等待结果被缓存。这种方式可以有效提高缓存的性能和稳定性。原创 2024-08-22 17:27:40 · 233 阅读 · 0 评论 -
Spring学习笔记
是 Lombok 提供的注解,它用于简化 Java 类的构建器模式。它允许你使用一个简洁的语法来创建带有可选参数和默认值的构建器。它用于将一个元素映射到多个元素的流中,并将其扁平化为单个流来处理。方法接受一个映射函数,该函数将输入流中的每个元素转换为一个流。它将每个子流中的元素提取并将其添加到输出流中。它消除了创建和维护单独的构建器类以及编写冗长的构建器代码的需要。该方法返回一个构建器对象,允许你设置类的属性。方法也用于将输入流中的元素映射到一个新的流。方法将每个元素映射到一个包含多个值的流。原创 2024-08-18 23:52:40 · 346 阅读 · 0 评论 -
Spring动态代理与AOP
通过上述步骤,Spring能够通过动态代理技术,在目标方法执行之前自动调用@Before通知中的方法,实现程序的模块化、可维护性和可扩展性。这样的机制使得开发者能够专注于核心业务逻辑,而不需要在每一处方法调用中编写重复的前置检查代码。实际上,当你在方法上使用注解时,Spring会确保该方法被代理,使其能够正确地管理事务。这个代理过程是基于Spring的AOP机制,并且是在运行时动态生成的,无需开发者在类定义或方法声明中添加额外的代码。原创 2024-08-18 23:45:24 · 926 阅读 · 0 评论 -
SpringBoot事件监听机制
这种使用反射的方式来处理事件监听,使得Spring能够实现动态的依赖注入、事件匹配和方法调用,而这些操作在运行时进行,增强了框架的灵活性和扩展性。在Java中,CGlib是一个常用的类库,用于实现动态代理,尤其对于那些声明了接口(继承了某个接口或实现了某个接口)的类,因为Java语言不支持在运行时动态创建接口的实现类。这里的查找和匹配过程,从宏观上看,是Spring框架在进行的一种“增强”操作,实际上是在执行AOP的逻辑。的方法的类型相匹配,那么Spring会调用该方法来处理事件。),遵循了接口隔离原则。原创 2024-08-18 23:12:21 · 1076 阅读 · 0 评论 -
@SpringBootConfiguration重复加载报错
的exclude属性:用于排除特定的自动配置类,而不是用于排除主配置类本身。不同的配置类:可以创建不同的配置类,并在不同的环境中使用不同的配置类。:用于创建测试专用的配置类,并在测试中使用。原创 2024-08-05 14:27:52 · 366 阅读 · 0 评论 -
@ConfigurationProperties加在方法上
配置属性类:创建一个简单的类,用于映射外部配置文件中的属性。配置类:在方法上使用注解和@Bean注解,将配置属性注入到Spring容器中的Bean中。配置文件:在或文件中添加配置属性。使用配置属性:通过注入配置属性类来使用这些配置属性。在Spring框架中,@Autowired注解通常用于自动注入依赖。虽然它通常用于类的字段或构造函数上,但也可以用于方法参数上。@Autowired加在形参上的用法也是合法的,并且可以与@Qualifier注解一起使用,以指定具体的bean。原创 2024-08-05 10:09:38 · 363 阅读 · 0 评论 -
Kafka
不同分区之间:不同分区之间的消息传递不涉及多播,它们是独立的,用于实现并行处理和负载均衡。多播:多播是通过消费者组来实现的,一个主题中的消息可以被多个消费者组独立消费。在Apache Kafka中,不同分区之间的消息传递并不直接涉及多播的概念。为了更好地理解这个问题,我们需要明确Kafka的分区和多播的定义。不同分区之间:不同分区之间的消息传递不涉及多播,它们是独立的,用于实现并行处理和负载均衡。多播:多播是通过消费者组来实现的,一个主题中的消息可以被多个消费者组独立消费。原创 2024-08-05 09:46:40 · 1955 阅读 · 0 评论 -
分库分表Java
在大型应用中,随着数据量的增加,单个数据库和单张表可能无法满足性能需求。此时,可以采用分库分表的策略来提升系统的性能和可扩展性。MyBatis 是一个流行的持久层框架,它可以与分库分表策略结合使用。原创 2024-08-02 16:48:26 · 963 阅读 · 0 评论 -
redisson分布式锁
Redisson 是一个基于 Redis 的 Java 驻内存数据网格(In-Memory Data Grid)客户端,它提供了许多分布式数据结构和服务,包括分布式锁。Redisson 的分布式锁实现基于 Redis 的。Redisson 的分布式锁是可重入的,这意味着同一个线程可以多次获取同一个锁,而不会发生死锁。通过以上步骤,可以使用 Redisson 实现分布式锁,从而在分布式系统中确保资源的互斥访问。使用 Redisson 客户端获取分布式锁,并进行加锁和解锁操作。原创 2024-08-02 15:40:47 · 898 阅读 · 0 评论 -
加密算法Java
对称加密:速度快,适合大数据量的加密,但密钥管理复杂。非对称加密:安全性高,密钥管理简单,但计算复杂度高,速度较慢。在实际应用中,通常会结合使用对称加密和非对称加密。例如,使用非对称加密算法来安全地交换对称加密的密钥,然后使用对称加密算法来加密数据。这种方式既能保证数据的安全性,又能提高加密和解密的效率。原创 2024-08-02 11:16:20 · 555 阅读 · 0 评论 -
策略模式Java
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式使得算法可以在不影响客户端的情况下发生变化。该模式通过将算法的实现从使用它的客户端中分离出来,使得算法的变化不会影响到客户端。原创 2024-08-02 11:05:41 · 432 阅读 · 0 评论 -
布隆过滤器
布隆过滤器(Bloom Filter)是一种空间效率非常高的概率型数据结构,用于测试一个元素是否属于一个集合。它可以用来快速判断一个元素是否在一个集合中,但它有一定的误判率,即可能会误判一个不存在的元素为存在,但不会误判一个存在的元素为不存在。原创 2024-08-02 10:57:50 · 406 阅读 · 0 评论 -
restTemplate配合@Sentinel进行熔断降级
在Spring Cloud中,Sentinel是一个流量控制、熔断降级的组件。你可以通过配置和注解的方式将Sentinel与RestTemplate结合使用,实现熔断降级功能。原创 2024-08-02 10:14:42 · 318 阅读 · 0 评论 -
MockBean
MockBean用于在测试环境中创建和注入 mock 对象。它可以替换现有的 Spring 容器中的 bean。可以在一个测试类中使用多个@MockBean注解来创建多个 mock 对象。通过使用@MockBean,你可以在测试中轻松地模拟依赖对象,从而专注于测试你的业务逻辑。这行代码是使用 Mockito 框架来模拟的行为。具体来说,它定义了当的findById方法被调用并传入参数1L时,返回一个包含mockUser的Optional对象。原创 2024-08-01 17:03:07 · 454 阅读 · 0 评论 -
ThreadPoolTaskExecutor
是 Spring 框架中的一个类,用于管理和配置线程池。它是接口的一个实现,提供了对 JavaExecutor和的抽象封装。通常用于在 Spring 应用中执行异步任务。原创 2024-07-25 10:00:04 · 442 阅读 · 0 评论 -
SSRF攻击
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,攻击者通过该漏洞可以让服务器在未经授权的情况下发起请求。SSRF 攻击通常利用服务器的权限来访问内部系统或外部资源,从而获取敏感信息或执行恶意操作。原创 2024-07-23 10:33:53 · 306 阅读 · 0 评论 -
exclude = DruidDataSourceAutoConfigure.class
即使排除了,你仍然可以使用数据库。排除自动配置类只是意味着 Spring Boot 不会自动配置 Druid 数据源,需要手动配置数据源和相关的数据库设置。原创 2024-07-22 14:37:17 · 243 阅读 · 0 评论 -
@RequestBody接收到的参数中如何限制List的长度?
的长度是否在指定范围内。如果不符合范围,将返回验证错误信息。的请求时,Spring MVC会自动验证。在Spring MVC中,你可以使用。注解和自定义的验证注解来限制。这样,当你发送一个包含。原创 2024-07-18 20:14:35 · 442 阅读 · 0 评论 -
Collections.unmodifiableList
以上方法都可以用来复制一个List,具体选择哪种方法取决于你的需求和使用场景。如果你需要一个简单的、快速的复制,可以使用ArrayList构造函数或addAll方法。如果你需要更灵活的操作,可以考虑使用stream和。原创 2024-07-17 19:32:25 · 663 阅读 · 0 评论 -
queryWrapper.eq()和lambdaQueryWrapper.eq()
确保传入的值类型与数据库字段类型匹配,以避免查询结果不正确或抛出异常。原创 2024-07-17 18:56:28 · 627 阅读 · 0 评论 -
@TableName(value=““)
如果你希望使用不同的命名策略,可以通过配置文件来进行配置。例如,可以配置为将实体类名称直接映射为表名(不进行转换):在或定义自定义命名策略} }} }} }} }} }import com} }} }} }} }import com} }} }} }} }原创 2024-07-17 15:33:29 · 831 阅读 · 0 评论 -
cn.hutool.core.util.IdUtil.getSnowflake
1 位符号位:始终为 0。41 位时间戳:表示毫秒级时间,可以使用约 69 年。10 位机器 ID:可以表示 1024 个节点。12 位序列号:每个节点每毫秒可以生成 4096 个 ID。通过使用 Hutool 的方法,你可以方便地生成基于 Snowflake 算法的分布式唯一 ID。这个方法非常适合在分布式系统中使用,能够保证高并发下的唯一性和性能。原创 2024-07-17 11:02:53 · 1130 阅读 · 0 评论 -
RedisAtomicLong
是 Spring Data Redis 提供的一个类,用于在 Redis 中实现原子性的长整型操作。它类似于 Java 的AtomicLong,但其操作是基于 Redis 的,因此可以在分布式环境中使用。Redis 的原子性命令保证了并发操作的正确性,因此在多个服务之间同时写入到同一个实例时,不会导致值被覆盖。你可以放心地在分布式环境中使用来实现线程安全的计数器。原创 2024-07-17 10:02:38 · 1020 阅读 · 0 评论 -
baomidou @DS注解
DS注解是 MyBatis-Plus 提供的一个注解,用于实现多数据源的动态切换。MyBatis-Plus 是一个增强的 MyBatis 框架,提供了许多实用的功能,其中之一就是多数据源支持。原创 2024-07-17 09:53:29 · 851 阅读 · 0 评论 -
Spring MVC中添加过滤器
通过 Java 配置类注册过滤器,适用于需要精细控制过滤器顺序和 URL 模式的场景。@Component注解:直接将过滤器类标记为 Spring 组件,适用于简单的过滤器注册。和@WebFilter注解:通过注解扫描注册过滤器,适用于需要通过注解配置过滤器的场景。原创 2024-07-16 19:18:59 · 330 阅读 · 0 评论 -
@annotation数组类型怎么传值
首先,定义一个包含数组类型元素的注解。Retention;在这个示例中,注解包含一个String数组类型的元素value。原创 2024-07-16 17:20:30 · 255 阅读 · 0 评论 -
HandlerInterceptor
是 Spring 框架中的一个接口,用于拦截和处理 HTTP 请求。它允许在请求到达控制器之前、请求处理之后以及视图渲染之前执行一些逻辑。通常用于实现跨领域关注点(如日志记录、身份验证、权限检查等)。通过这种方式,可以在 Spring 应用程序中使用。来拦截和处理 HTTP 请求。原创 2024-07-16 16:18:35 · 277 阅读 · 0 评论 -
Java相关
检查Optional是否包含值。:如果Optional包含值,则执行给定的Consumer。orElse():如果Optional为空,返回一个默认值。:如果Optional为空,调用一个Supplier并返回其结果。:如果Optional为空,抛出一个指定的异常。filter():根据谓词对Optional进行过滤。通过这些方法,Optional提供了一种更安全和简洁的方式来处理可能为空的值,避免了显式的null检查和潜在的。你也可以通过实现Consumer接口来创建一个自定义的。原创 2024-07-16 14:41:46 · 566 阅读 · 0 评论 -
@Pointcut注解
首先,定义一个切面类,并使用@Pointcut注解定义切入点表达式。// 定义一个切入点表达式,匹配所有在com.example.service包及其子包中的方法 @Pointcut("execution(* com.example.service..*(..))") public void serviceLayer() {// 方法体可以为空,因为这个方法只是一个标识,用于定义切入点表达式 } }原创 2024-07-16 11:13:24 · 590 阅读 · 0 评论 -
Docker
Docker是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行。Docker通过将应用程序及其依赖项打包到一个容器中,使得应用程序可以在任何环境中一致地运行。Pod是Kubernetes中的基本调度单元。一个Pod可以包含一个或多个容器,这些容器共享存储、网络和命名空间。Pod中的容器通常是紧密耦合的,协同工作来完成某个任务。Docker:一个开源的容器化平台,提供了构建、运行和管理容器的工具和服务。Pod:Kubernetes中的基本调度单元,包含一个或多个共享网络和存储资源的容器。原创 2024-07-16 10:50:31 · 650 阅读 · 0 评论 -
跨站请求伪造解决方案
防止CSRF攻击的方法有很多,最常见和有效的方法是使用CSRF令牌。其他方法如验证HTTP Referer头、使用SameSite Cookie属性和双重提交Cookie也可以作为辅助措施。根据具体的应用场景和需求,可以选择一种或多种方法来保护你的应用免受CSRF攻击。原创 2024-07-16 10:30:07 · 601 阅读 · 0 评论 -
延迟队列完成订单超时取消功能
通过在订单支付时及时更新订单状态,可以确保在处理延迟消息时能够正确地判断订单是否已经支付,从而避免错误地取消已支付的订单。这种方式可以有效地确保订单超时处理的准确性和可靠性。原创 2024-07-16 10:28:56 · 413 阅读 · 0 评论 -
slf4j.MDC
MDC是专门为日志记录设计的,提供了一些方便的方法来管理日志上下文信息,内部实现通常基于。是 Java 提供的通用机制,用于在多线程环境中存储线程本地数据,适用于各种需要线程本地存储的场景。原创 2024-07-15 16:42:26 · 757 阅读 · 0 评论 -
@SentinelResource
用于处理限流或熔断导致的异常,方法签名中需要包含参数。:用于处理业务异常或其他运行时异常,方法签名中需要包含Throwable参数。:用于指定在 JSON 中对应的属性名称为。序列化:将 Java 对象转换为 JSON 时,字段会被序列化为。反序列化:将 JSON 转换为 Java 对象时,属性会被映射到字段。通过使用注解,可以方便地控制 JSON 和 Java 对象之间的属性名称映射,确保数据在传输和存储过程中保持一致性。原创 2024-07-15 14:50:59 · 647 阅读 · 0 评论 -
@Configuration和@ConfigurationProperties
注解可以放置在任何带有注解的类上。确保配置类被 Spring 扫描到,以便生效。使用属性指定 Feign 客户端接口所在的包路径。可以在任意带有注解的类上使用注解,并正确配置和使用 Feign 客户端。是 Spring Boot 提供的一个注解,用于将外部配置文件(如或)中的属性映射到 Java 类中。它通常与@Component或注解一起使用,以便 Spring 容器能够管理这个配置类。使用注解定义一个配置类,并指定前缀。这个前缀对应于配置文件中的属性前缀。} }原创 2024-07-15 11:53:35 · 815 阅读 · 0 评论 -
扫描加在类上的自定义注解
if(logger!= null) {System . out . println("拦截注解,执行前 " + logger . detail());} else {原创 2024-07-15 11:32:55 · 328 阅读 · 0 评论 -
从代理模式到注解开发
JDK 动态代理:适用于代理实现了接口的类。CGLIB 动态代理:适用于代理没有实现接口的类。这两种动态代理机制都可以用于实现 AOP(面向切面编程),以便在不修改目标对象代码的情况下添加额外的功能。} }");} }Service;@Service");原创 2024-07-12 19:42:39 · 1002 阅读 · 0 评论 -
Spring开发实践(六)
在或注解用于将配置文件中的属性映射到 Java 类。注解用于启用对注解的支持。配置属性类可以通过@Component注解注册为 Spring Bean,或者通过注解进行注册。在配置文件中定义属性,并在需要的地方注入和使用这些属性。在注解中,如果不指定具体的配置属性类(例如),那么这个注解将不会启用任何特定的配置属性类。这意味着 Spring Boot 将不会自动扫描和注册任何使用注解的类。不指定具体类:配置属性类不会被注册,配置文件中的属性不会被绑定。指定具体类。原创 2024-07-12 09:51:47 · 698 阅读 · 0 评论 -
接口幂等性和解决方案
Redis保证了在相同key的情况下,只会保留一条数据,这就保证了多次请求只会消费一条数据。并且需要注意的是,生成/获取token和携带token发送请求的过程需要是两个不同的过程。原创 2024-07-12 00:29:26 · 172 阅读 · 0 评论