【spring系列】
文章平均质量分 59
spring、springboot及其生态下的技术研究
立小言先森
这个作者很懒,什么都没留下…
展开
-
Java反射机制中UndeclaredThrowableException异常
在Java中UndeclaredThrowableException是Java反射机制中使用的一个特殊异常类,通常与InvocationHandler接口一起使用,在通过反射调用方法时,如果方法声明抛出了受检查异常(checked exception),但是在方法上并没有声明抛出的这些异常,那么就会抛出UndeclaredThrowableException异常。这个异常包装了实际发生的受检异常,使其可以作为一个非受检异常(unchecked exception)被抛出。原创 2024-09-24 19:35:17 · 350 阅读 · 0 评论 -
Spring Shell基于注解定义命令
默认情况下,命令根据其实现的类进行分组,将驼峰类名转换为单独的单词。可以通过如下方式指定分组(优先级按照说明顺序)原创 2024-09-24 19:33:19 · 122 阅读 · 0 评论 -
搭建第一个Spring Shell案例
Spring Shell允许您创建这样一个可运行的应用程序,用户可以在其中输入文本命令,这些命令将一直运行,直到程序终止。Spring Shell项目提供了创建这样一个REPL(Read, Eval, Print Loop)应用程序的基础设施,让你可以通过使用熟悉的Spring编程模型专注于实现命令。为了了解spring shell提供了什么,我们可以编写一个简单的hello world shell应用程序,它有一个简单的参数。这意味值需要启用InteractiveShellRunner才能获取REPL。原创 2024-09-23 19:08:28 · 374 阅读 · 0 评论 -
Spring Boot CLI命令行工具
Spring Boot CLI适应各命令行工具,你可以使用它快速创建spring项目,通常我们都是使用idea等工具来创建项目,用不到CLI,但这提供了一种在没有IDE的情况下快速创建启动spring应用的方法。示例创建项目my-project,默认gradle依赖spring-boot-starter-web和spring-boot-starter-data-jpa。原创 2024-09-23 19:06:55 · 601 阅读 · 0 评论 -
Maven项目中dependencyManagement(BOM)和pluginManagement作用
在Maven项目中dependencyManagement用于定义BOM(Bill Of Materials)物料清单,pluginManagement用于maven插件定义。原创 2024-09-10 19:09:58 · 336 阅读 · 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 · 1134 阅读 · 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 · 882 阅读 · 0 评论 -
Bill of Materials (BOM) POMs
Bill of Materials (BOM)物料清单,实际上就是一个普通的pom文件,在pom文件中只定义dependencyManagement版本依赖管理,用于管理项目依赖的所有jar包;有利于包版本的统一,降低由于版本不一致导致的冲突;有利于降低配置的复杂度,提升开发效率。个人开源SDK原创 2024-09-05 19:07:08 · 887 阅读 · 0 评论 -
Maven持续集成(Continuous integration,简称CI)版本友好管理
从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用revision{sha1}、${changelist}做为版本的占位符。原创 2024-09-03 19:35:22 · 811 阅读 · 0 评论 -
RedisCache存入redis的数据key为何name和id的分隔符是两个冒号::
Redis Cache缓存数据生成的key是由两部分组成,cacheNames和+d或者自定义生成方案,如果采用cacheNames+id方案则会在中间添加两个冒号::,这样使用工具查看的时候感觉怪怪的,今天我们就探讨下具体生成原因。原创 2024-09-03 19:31:28 · 376 阅读 · 0 评论 -
Redis的KeyExpirationEventMessageListener键过期监听器
MessageListener通过监听key过期的Redis keyspace通知,然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。原创 2024-09-02 19:47:33 · 979 阅读 · 0 评论 -
Redis发布订阅PUB/SUB
Redis发布订阅PUB/SUB是一种消息通信模式,发送者PUB发送消息,订阅者SUB接收消息。Redis客户端可以订阅任意数量的频道,一个通道CHANNEL可以被多个客户端订阅,当一条消息发送到CHANNEL中去后所有订阅的客户端都会接收到此消息。原创 2024-09-02 19:46:01 · 570 阅读 · 0 评论 -
RedisMessageListenerContainer容器初始化
RedisMessageListenerContainer是Spring Data Redis提供的一个容器类,为Redis监听器提供异步处理能力,处理低级别消息、转换Redis的消息通道,它通常与MessageListenerAdapter和自定义的消息监听器一起使用。原创 2024-08-29 19:29:50 · 791 阅读 · 0 评论 -
Spring框架中PathMatchingResourcePatternResolver解析资源路径并匹配资源模式
PathMatchingResourcePatternResolver是Spring框架中用于解析资源路径并匹配资源模式的一个工具类。它常用于在Spring的上下文中加载资源,如:配置文件、类路径下的文件加载等。PathMatchingResourcePatternResolver是一个Ant模式通配符的Resource查找器,可以用来查找类路径下或者文件系统中的资源获取文件系统文件。PathMatchingResourcePatternResolver位于spring-core包之中。原创 2024-08-29 19:27:30 · 613 阅读 · 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 · 1072 阅读 · 0 评论 -
springboot故障分析FailureAnalyzer
org.springframework.boot.diagnostics.FailureAnalyzer是springboot框架中的一个接口,用于为应用程序启动失败提供详细的诊断报告。当springboot应用程序无法正常启动时,springboot会尝试查找一个或多个实现了FailureAnalyzer接口的类,以提供关于失败原因的详细信息。原创 2024-08-27 19:02:24 · 509 阅读 · 0 评论 -
spring如何给bean动态取不同的别名
spring、springboot向容器中注入bean的时候一般情况下只有一个别名,在某些特殊场景需要指定多个别名。原创 2024-06-29 10:11:33 · 659 阅读 · 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 · 732 阅读 · 0 评论 -
Java module-info模块系统
模块中如果未定义module-info.java,那么我们在自己的项目中通过module-info.java定义依赖的时候是否可以使用?答案:是可以的,如依赖的包名为a-b-c-starter,则系统自动会解析成模块名为a.b.c.starter,此模块中的所有包都导出官方没有明确指定具体的命名规则,只要遵从通用准则一般不会有问题,如:唯一性、建议小写字母、点号分割、允许字母数字混合。原创 2024-06-22 11:39:01 · 1473 阅读 · 0 评论 -
解锁新技能《logback标记日志过滤器MarkerFilter》
*** 全局标记过滤器,接受指定标记的日志记录到文件中* @param context 上下文* @param marker marker标识* @return 标记过滤器,将会接受被标记的日志记录到文件中//过滤器名称 filter . setName(StrUtils . join("AcceptMarkerFilter-" , marker));//上下文 filter . setContext(context);原创 2023-07-22 09:11:10 · 1022 阅读 · 0 评论 -
解锁新技能《spring如何将属性配置文件中的属性绑定到实体类中》
*** 前缀} }原创 2023-07-15 14:37:06 · 1100 阅读 · 0 评论 -
解锁新技能《springboot全局异常处理@ExceptionHandler如何获取控制器方法上的注解》
springboot全局异常处理通常都是用@RestControllerAdvice标注异常处理类,使用@ExceptionHandler标注在捕获具体异常的方法上,我们可以通过异常参数获取异常信息,那如果我想获取抛出异常的具体控制器及其上面标注的注解如何获取呢?原创 2023-07-05 23:45:00 · 1532 阅读 · 0 评论 -
解锁新技能《springboot基于表单multipart/form-data的文件上传》
springboot的文件上传有多种实现方案,个人比较推荐方案三通过实体类属性绑定的方式,这样可以方便文件及其关联的相关属性字段;开源依赖pom</</</</原创 2023-07-05 23:45:00 · 1298 阅读 · 0 评论 -
解锁新技能《springboot基于ResponseBodyAdvice的AOP切面返回值包装》
在项目开发过程中我们会对返回值进行统一的包装处理,对最外层加上status、message、data、spentTime等统一个是的包装;当前SDK支持两种方案,一种基于适配器模式实现,一种基于AOP切面实现,本文只对AOP模式讲解,适配器方案参考源码;原创 2023-07-05 23:45:00 · 592 阅读 · 0 评论 -
解锁新技能《AnnotationConfigApplicationContext@7a8414ea has been closed already》
}原创 2023-06-26 19:08:41 · 1086 阅读 · 0 评论 -
Druid数据库配置密码加密openssl生成和代码生成两种方案
【代码】Druid数据库配置openssl生成秘钥并加密密码。原创 2023-05-26 21:00:00 · 1256 阅读 · 0 评论 -
解锁新技能《Spring Plugin插件系统》
平时工作过程中很少使用Spring Plugin插件,最近因为在学习springfox源码的过程中发现有大量用到,先来学习下插件的使用方法。截止20230426日,GitHub的Star为403,fork数为107.官方说Spring Plugin是世界上最小规模的插件系统,果然名不虚产,用户数够小。Spring Plugin通过提供扩展核心系统功能的插件实现核心的灵活性,可以满足我们对模块化可扩展程序的需要。原创 2023-04-26 19:33:17 · 1583 阅读 · 0 评论 -
mybatis-typehandlers-jsr310对Java日期对象和JDBC日期对象转换器过期
最近看到公司很多项目中都引入了这个依赖,但是都说不清楚到底有什么用,只知道是mybatis用来对日期做转换的,所以就研究一下到底做什么的;原创 2023-02-15 19:30:48 · 1531 阅读 · 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 · 16450 阅读 · 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 · 2174 阅读 · 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 · 11200 阅读 · 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 · 2771 阅读 · 0 评论 -
死磕源码系列【@EnableConfigurationProperties注解及EnableConfigurationPropertiesRegistrar注册器类源码解析】
@EnableConfigurationProperties注解通常和@ConfigurationProperties注解一起使用,将标记了@ConfigurationProperties的bean绑定配置文件中的属性并将其注册到IOC容器之中。首先看下@EnableConfigurationProperties注解的源码@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EnableCo.原创 2020-11-05 19:50:13 · 1589 阅读 · 0 评论 -
死磕源码系列【consul配置中心监视器类ConfigWatch动态刷新配置】
consul作为配置中心时可以开启动态刷新配置的功能,其实现类是通过ConfigWatch来实现;监视器类相关属性配置spring: cloud: consul: config: watch: # 是否开启配置中心配置变动,默认:true enabled: true # 监控的固定延迟值,即一次执行完成到下一次执行开始之间的间隔,默认:1000毫秒 delay: 1000 .原创 2021-01-15 18:23:51 · 1911 阅读 · 1 评论 -
java中ThreadLocal、InheritableThreadLocal详解
一、ThreadLocal介绍 在多线程环境下访问同一个线程的时候会出现并发问题,特别是多个线程同时对一个变量进行写入操作时,为了保证线程的安全,通常会进行加锁来保证线程的安全,但是加锁又会造成效率的降低;ThreadLocal是jdk提供的除了加锁之外保证线程安全的方法,其实现原理是在Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThreadLocals用来存储当前操作的ThreadLocal的引用及变量对象,这样就可以把当前线程的变原创 2021-11-11 19:49:29 · 4533 阅读 · 0 评论 -
druid数据库连接池保活机制源码
druid连接池未设置保活机制时如何对连接有效性保护?如果连接发生了致命性异常,则会加入保活连接数组,接下来校验有效性;如果设置了物理连接超时时间,并且连接的空闲时间大于设置的物理连接超时时间,则会加入驱逐连接数组;如果连接的空闲时间小于最小驱逐空闲时间,并且小于保活检查间隔时间,则继续等待下一轮检查;如果连接的空闲时间大于最小驱逐空闲时间,并且轮询索引小于合并计数器,则将该连接放入驱逐连接数组;如果连接的空闲时间大于最大驱逐空闲时间,则将连接放入驱逐连接数组;未启用保活机制剔除后连接池中原创 2022-02-21 19:39:23 · 3193 阅读 · 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 · 1288 阅读 · 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 · 820 阅读 · 0 评论 -
死磕源码系列【springboot之内部类解析processMemberClasses源码分析】
在将配置类解析为ConfigurationClass配置类时经常会遇到内部配置类的情况,遇到这种情况是如何解析的呢?本文对这一块进行一一解释;ConfigurationClassParser#processMemberClasses方法解析内部类//注册配置类成员嵌套类private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass, Predicate<String>原创 2020-12-08 18:21:08 · 977 阅读 · 0 评论