【spring系列】
文章平均质量分 60
spring、springboot及其生态下的技术研究
立小言先森
这个作者很懒,什么都没留下…
展开
-
Maven项目中dependencyManagement(BOM)和pluginManagement作用
在Maven项目中dependencyManagement用于定义BOM(Bill Of Materials)物料清单,pluginManagement用于maven插件定义。原创 2024-09-10 19:09:58 · 334 阅读 · 0 评论 -
spring-boot-maven-plugin插件
spring-boot-maven-plugin插件对Apache Maven提供Spring Boot支持,它允许你在运行集成测试之前打包可执行jar或war文件目录,运行spring boot应用程序,生成构建信息并启动spring boot应用。Maven版本必须是3.6.3或更高版本。原创 2024-09-10 19:08:00 · 1122 阅读 · 0 评论 -
Spring Cloud OpenFeign 4组件
核心初始化类:FeignClientFactoryBean、FeignAutoConfiguration、FeignClientsConfiguration、HttpClient5FeignConfiguration。Client的默认实现类是feign.hc5.ApacheHttp5Client。请求url如:api/feign/test/myname,key1=value1a,value1b;RequestInterceptor和ResponseInterceptor如何初始化。原创 2024-09-05 19:09:03 · 873 阅读 · 0 评论 -
Bill of Materials (BOM) POMs
Bill of Materials (BOM)物料清单,实际上就是一个普通的pom文件,在pom文件中只定义dependencyManagement版本依赖管理,用于管理项目依赖的所有jar包;有利于包版本的统一,降低由于版本不一致导致的冲突;有利于降低配置的复杂度,提升开发效率。个人开源SDK原创 2024-09-05 19:07:08 · 885 阅读 · 0 评论 -
Maven持续集成(Continuous integration,简称CI)版本友好管理
从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用revision{sha1}、${changelist}做为版本的占位符。原创 2024-09-03 19:35:22 · 808 阅读 · 0 评论 -
RedisCache存入redis的数据key为何name和id的分隔符是两个冒号::
Redis Cache缓存数据生成的key是由两部分组成,cacheNames和+d或者自定义生成方案,如果采用cacheNames+id方案则会在中间添加两个冒号::,这样使用工具查看的时候感觉怪怪的,今天我们就探讨下具体生成原因。原创 2024-09-03 19:31:28 · 366 阅读 · 0 评论 -
Redis的KeyExpirationEventMessageListener键过期监听器
MessageListener通过监听key过期的Redis keyspace通知,然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。原创 2024-09-02 19:47:33 · 957 阅读 · 0 评论 -
Redis发布订阅PUB/SUB
Redis发布订阅PUB/SUB是一种消息通信模式,发送者PUB发送消息,订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道,一个通道CHANNEL可以被多个客户端订阅,当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。原创 2024-09-02 19:46:01 · 568 阅读 · 0 评论 -
RedisMessageListenerContainer容器初始化
RedisMessageListenerContainer是Spring Data Redis提供的一个容器类,为Redis监听器提供异步处理能力,处理低级别消息、转换Redis的消息通道,它通常与MessageListenerAdapter和自定义的消息监听器一起使用。原创 2024-08-29 19:29:50 · 766 阅读 · 0 评论 -
Spring框架中PathMatchingResourcePatternResolver解析资源路径并匹配资源模式
PathMatchingResourcePatternResolver是Spring框架中用于解析资源路径并匹配资源模式的一个工具类。它常用于在Spring的上下文中加载资源,如:配置文件、类路径下的文件加载等。PathMatchingResourcePatternResolver是一个Ant模式通配符的Resource查找器,可以用来查找类路径下或者文件系统中的资源获取文件系统文件。PathMatchingResourcePatternResolver位于spring-core包之中。原创 2024-08-29 19:27:30 · 590 阅读 · 0 评论 -
spring-data-redis中RedisRepository仓储
Id@RedisHash注解的value属性和@Id注解指定键值的命名空间,组合成user:id;@RedisHash的属性timeToLive属性指定键值的超时时间。CrudRepository接口中默认定义实现了save、saveAll、findById、existsById、findAll、findAllById、count、deleteById、delete、deleteAllById、deleteAll等方法,基本满足了对redis操作的需求;如果有特殊需求可以自定义实现。原创 2024-08-27 19:04:13 · 1071 阅读 · 0 评论 -
springboot故障分析FailureAnalyzer
org.springframework.boot.diagnostics.FailureAnalyzer是springboot框架中的一个接口,用于为应用程序启动失败提供详细的诊断报告。当springboot应用程序无法正常启动时,springboot会尝试查找一个或多个实现了FailureAnalyzer接口的类,以提供关于失败原因的详细信息。原创 2024-08-27 19:02:24 · 507 阅读 · 0 评论 -
spring如何给bean动态取不同的别名
spring、springboot向容器中注入bean的时候一般情况下只有一个别名,在某些特殊场景需要指定多个别名。原创 2024-06-29 10:11:33 · 649 阅读 · 0 评论 -
spring-boot-configuration-processor注释处理器
spring-boot-configuration-processor是springboot提供的一个注释处理器(annotation processor),它用于在编译时生成元数据文件(META-INF/spring-configuration-metadata.json),该文件描述了你的配置属性,以便为开发者提供自动补全和文档支持。生成的元数据文件可以被 IDE(如 IntelliJ IDEA 或 Visual Studio Code)的 Spring Boot 插件使用,以提供自动补全和文档支持。原创 2024-06-29 10:09:55 · 710 阅读 · 0 评论 -
Java module-info模块系统
模块中如果未定义module-info.java,那么我们在自己的项目中通过module-info.java定义依赖的时候是否可以使用?答案:是可以的,如依赖的包名为a-b-c-starter,则系统自动会解析成模块名为a.b.c.starter,此模块中的所有包都导出官方没有明确指定具体的命名规则,只要遵从通用准则一般不会有问题,如:唯一性、建议小写字母、点号分割、允许字母数字混合。原创 2024-06-22 11:39:01 · 1454 阅读 · 0 评论 -
解锁新技能《logback标记日志过滤器MarkerFilter》
*** 全局标记过滤器,接受指定标记的日志记录到文件中* @param context 上下文* @param marker marker标识* @return 标记过滤器,将会接受被标记的日志记录到文件中//过滤器名称 filter . setName(StrUtils . join("AcceptMarkerFilter-" , marker));//上下文 filter . setContext(context);原创 2023-07-22 09:11:10 · 1017 阅读 · 0 评论 -
解锁新技能《spring如何将属性配置文件中的属性绑定到实体类中》
*** 前缀} }原创 2023-07-15 14:37:06 · 1099 阅读 · 0 评论 -
解锁新技能《springboot全局异常处理@ExceptionHandler如何获取控制器方法上的注解》
springboot全局异常处理通常都是用@RestControllerAdvice标注异常处理类,使用@ExceptionHandler标注在捕获具体异常的方法上,我们可以通过异常参数获取异常信息,那如果我想获取抛出异常的具体控制器及其上面标注的注解如何获取呢?原创 2023-07-05 23:45:00 · 1527 阅读 · 0 评论 -
解锁新技能《springboot基于表单multipart/form-data的文件上传》
springboot的文件上传有多种实现方案,个人比较推荐方案三通过实体类属性绑定的方式,这样可以方便文件及其关联的相关属性字段;开源依赖pom</</</</原创 2023-07-05 23:45:00 · 1290 阅读 · 0 评论 -
解锁新技能《springboot基于ResponseBodyAdvice的AOP切面返回值包装》
在项目开发过程中我们会对返回值进行统一的包装处理,对最外层加上status、message、data、spentTime等统一个是的包装;当前SDK支持两种方案,一种基于适配器模式实现,一种基于AOP切面实现,本文只对AOP模式讲解,适配器方案参考源码;原创 2023-07-05 23:45:00 · 590 阅读 · 0 评论 -
解锁新技能《AnnotationConfigApplicationContext@7a8414ea has been closed already》
}原创 2023-06-26 19:08:41 · 1080 阅读 · 0 评论 -
Druid数据库配置密码加密openssl生成和代码生成两种方案
【代码】Druid数据库配置openssl生成秘钥并加密密码。原创 2023-05-26 21:00:00 · 1255 阅读 · 0 评论 -
解锁新技能《Spring Plugin插件系统》
平时工作过程中很少使用Spring Plugin插件,最近因为在学习springfox源码的过程中发现有大量用到,先来学习下插件的使用方法。截止20230426日,GitHub的Star为403,fork数为107.官方说Spring Plugin是世界上最小规模的插件系统,果然名不虚产,用户数够小。Spring Plugin通过提供扩展核心系统功能的插件实现核心的灵活性,可以满足我们对模块化可扩展程序的需要。原创 2023-04-26 19:33:17 · 1576 阅读 · 0 评论 -
mybatis-typehandlers-jsr310对Java日期对象和JDBC日期对象转换器过期
最近看到公司很多项目中都引入了这个依赖,但是都说不清楚到底有什么用,只知道是mybatis用来对日期做转换的,所以就研究一下到底做什么的;原创 2023-02-15 19:30:48 · 1530 阅读 · 0 评论 -
Druid1.2.12版本发布,新增连接池默认配置connectTimeout和socketTimeout详解
高级别的timeout依赖于低级别的timeout,只有当低级别的timeout无误时,高级别的timeout才能确保正常;如:当socket timeout出问题时,高级别statement timeout和transaction timeout都将失效。statement timeout无法处理网络连接失败时的超时,它能做的仅仅是限制statement的操作时间,网络连接失败时的timeout必须交由JDBC来处理,JDBC的socket timeout会受到操作系统socket timeout设置的影原创 2022-09-17 09:22:34 · 16418 阅读 · 6 评论 -
解锁《RedisTemplate和StringRedisTemplate的区别是什么?》
- StringRedisTemplate是RedisTemplate的子类,RedisTemplate是一个泛型类型,而StringRedisTemplate则不是。- 两者的序列化策略不同,StringRedisTemplate采用String的序列化策略,key和value都是采用此种策略;RedisTemplate则采用JDK的序列化策略;- 两者的数据不共通,原因就是上述所说的序列化策略不同的原因;原创 2022-09-03 14:36:45 · 329 阅读 · 0 评论 -
jackson将JSON字符串转换成复杂的数据类型
private static ObjectMapper objectMapper = new ObjectMapper(); /** * 示例1: * List<Map<Integer, String>> list = Lists.newArrayList(); * Map<Integer, ...原创 2019-09-28 08:58:53 · 2173 阅读 · 1 评论 -
jackson序列化和反序列化@JsonProperty、@JsonGetter、@JsonSetter、@JsonFormat
1.@JsonProperty将传递过来的属性值序列化为指定的属性名package com.yaomy.control.test.po;import com.fasterxml.jackson.annotation.JsonProperty;public class People { @JsonProperty("USERNAME") private String username; public String getUsername() { retur原创 2020-05-12 09:48:48 · 11196 阅读 · 0 评论 -
死磕源码系列【springboot之OnClassCondition、OnBeanCondition、OnWebApplicationCondition条件注解源码解析】
在spring-boot-autoconfigurejar包中的spring.factories配置文件中有一个org.springframework.boot.autoconfigure.AutoConfigurationImportFilter自动化配置import过滤器,配置如下:# Auto Configuration Import Filtersorg.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\org.原创 2020-12-03 19:29:48 · 2767 阅读 · 0 评论 -
死磕源码系列【@EnableConfigurationProperties注解及EnableConfigurationPropertiesRegistrar注册器类源码解析】
@EnableConfigurationProperties注解通常和@ConfigurationProperties注解一起使用,将标记了@ConfigurationProperties的bean绑定配置文件中的属性并将其注册到IOC容器之中。首先看下@EnableConfigurationProperties注解的源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EnableCo.原创 2020-11-05 19:50:13 · 1587 阅读 · 0 评论 -
死磕源码系列【consul配置中心监视器类ConfigWatch动态刷新配置】
consul作为配置中心时可以开启动态刷新配置的功能,其实现类是通过ConfigWatch来实现;监视器类相关属性配置spring: cloud: consul: config: watch: # 是否开启配置中心配置变动,默认:true enabled: true # 监控的固定延迟值,即一次执行完成到下一次执行开始之间的间隔,默认:1000毫秒 delay: 1000 .原创 2021-01-15 18:23:51 · 1910 阅读 · 1 评论 -
java中ThreadLocal、InheritableThreadLocal详解
一、ThreadLocal介绍 在多线程环境下访问同一个线程的时候会出现并发问题,特别是多个线程同时对一个变量进行写入操作时,为了保证线程的安全,通常会进行加锁来保证线程的安全,但是加锁又会造成效率的降低;ThreadLocal是jdk提供的除了加锁之外保证线程安全的方法,其实现原理是在Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThreadLocals用来存储当前操作的ThreadLocal的引用及变量对象,这样就可以把当前线程的变原创 2021-11-11 19:49:29 · 4526 阅读 · 0 评论 -
druid数据库连接池保活机制源码
druid连接池未设置保活机制时如何对连接有效性保护?如果连接发生了致命性异常,则会加入保活连接数组,接下来校验有效性;如果设置了物理连接超时时间,并且连接的空闲时间大于设置的物理连接超时时间,则会加入驱逐连接数组;如果连接的空闲时间小于最小驱逐空闲时间,并且小于保活检查间隔时间,则继续等待下一轮检查;如果连接的空闲时间大于最小驱逐空闲时间,并且轮询索引小于合并计数器,则将该连接放入驱逐连接数组;如果连接的空闲时间大于最大驱逐空闲时间,则将连接放入驱逐连接数组;未启用保活机制剔除后连接池中原创 2022-02-21 19:39:23 · 3188 阅读 · 0 评论 -
死磕源码系列【SpringFactoriesLoader定位加载spring.factories文件中的配置】
META-INF/spring.factories文件对我们来说应该是最熟悉的了,如springboot开发自动化配置starter的时候配置类是要配置到这个文件后才能够实现自动的加载类到IOC容器之中;但是文件中的配置类是如何被定位、加载、初始化的呢?今天我们就来聊聊spring.factories文件定位、加载、实例化。1.首先看下spring.factories文件中的配置示例先看下spring-boot-autoconfigure中的部分配置:# Initializersorg.spri.原创 2020-09-19 15:27:19 · 1286 阅读 · 0 评论 -
死磕源码系列【JavaConfig配置bean别名AliasRegistry详解】
AliasRegistry用于管理别名的公共接口,作为BeanDefinitionRegistry的超级接口(主要用作JavaConfig配置bean别名的注册、删除、判定、获取)AliasRegistry接口源码:public interface AliasRegistry { /** * 给定一个名称,给它注册一个别名 * @param 规范的命名 * @param 要注册的别名 * @throws IllegalStateException if the alias is .原创 2020-10-22 19:24:27 · 819 阅读 · 0 评论 -
死磕源码系列【springboot之内部类解析processMemberClasses源码分析】
在将配置类解析为ConfigurationClass配置类时经常会遇到内部配置类的情况,遇到这种情况是如何解析的呢?本文对这一块进行一一解释;ConfigurationClassParser#processMemberClasses方法解析内部类//注册配置类成员嵌套类private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass, Predicate<String>原创 2020-12-08 18:21:08 · 976 阅读 · 0 评论 -
死磕源码系列【ConfigFileApplicationListener监听器源码解析】
ConfigFileApplicationListener监听器主要用来处理环境配置相关业务,其加载是在springboot启动时通过SPI方式获取(之前的文章已经将结果);ConfigFileApplicationListener监听器类继承SmartApplicationListener接口实现了supportsEventType方法,判定监听器实际上支持的时间类型: @Override public boolean supportsEventType(Class<? extends A.原创 2020-10-24 15:12:21 · 1606 阅读 · 1 评论 -
springcloud值ribbon打印WARN日志You already have RibbonLoadBalancerClient on your classpath. It will be us
在使用springcloud ribbon做客户端负载均衡的时候控制台打印如下日志:You already have RibbonLoadBalancerClient on your classpath. It will be used by default. As Spring Cloud Ribbon is in maintenance mode. We recommend switching to BlockingLoadBalancerClient instead. In order to use原创 2020-11-28 13:17:27 · 10081 阅读 · 0 评论 -
springboot Redis 多数据源组件
由于系统需要同一个项目需要配置多个redis数据源,并且很多项目都是同样的需求;在网上查了一波,大家的做法都是在每个需要配置多个数据源的地方添加多个配置类,需要引入几个数据源就需要写几个配置类,如果有N个项目就需要在N个项目中重复N遍相同的代码;所以就想到了自己动手对springboot提供的redis模块进行封装,使其可以无需任何多余的代码编写只需引入提前写好的组件就可以完成任意多个redis数据源的配置。组件支持哪些功能基于springboot自动化配置,实现开箱即用完全基于springbo.原创 2021-11-06 13:49:17 · 2115 阅读 · 0 评论 -
druid数据库连接池泄漏removeAbandoned|connectedTimeNano属性配置
当程序存在缺陷时,申请的连接忘记关闭,这时候就存在连接泄漏了,druid提供了removeAbandanded相关配置,用来关闭长时间不适用的连接,removeAbandanded功能不建议再生产环境中使用,仅用于连接蟹柳检测诊断;配置:#连接池泄漏监测,当程序存在缺陷时,申请的连接忘记关闭,这时就存在连接泄漏了,开启后对性能有影响,建议生产关闭,默认:falsespring.emily.datasource.config.mysql.remove-abandoned=false#默认:300*.原创 2022-02-26 09:59:19 · 7408 阅读 · 0 评论