spring
文章平均质量分 68
zlpzlpzyd
成长路上......
展开
-
spring事务@Transactional
spring 事务注解 @Transactional 添加后,通过 aop 为当前方法创建代理对象,默认使用 cglib,可以使用 java 的动态代理。默认回滚异常为 RuntimeException 或者 Error 子类,如果抛出的异常非 RuntimeException 子类,需要单独指定 rollbackFor 为 Exception,否则会捕捉不到。原创 2024-04-21 16:38:59 · 986 阅读 · 0 评论 -
spring中各种bean加载顺序
具体加载顺序按照罗列的顺序。原创 2024-04-06 00:48:45 · 447 阅读 · 0 评论 -
spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序
spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序原创 2024-03-09 01:07:26 · 583 阅读 · 1 评论 -
spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程
spring-cloud-openfeign(spring 2.4.x之前) 3.0.0之前版本feign整合ribbon请求流程原创 2024-03-09 01:01:16 · 603 阅读 · 0 评论 -
spring boot 2.4.x 之前版本(对应spring-cloud-openfeign 3.0.0之前版本)feign请求异常逻辑
内层请求异常返回原始异常,外层异常使用 ribbon 的 ClientException 进行包装最终通过 feign.Client.Default 来执行实际请求,如果引入了其他依赖(例如 feign-httpclient 或者 feign-hc5 或者 feign-okclient),会使用其他方式。最终通过 native 函数调用 jvm 层次的 tcp 网络调用,出现异常返回 IOException。原创 2024-03-09 00:40:56 · 1122 阅读 · 0 评论 -
spring cloud @RefreshScope 刷新机制
nacos 的在页面上的配置信息的更新是通过 jvm 重启实现的。想到了 jvm 启动后,无法做热更新,这么做也是不错的选择。由于做了重启,这个适合在没有访问的情况下执行,如果在操作过程中有事务在执行会不好,但是在生产环境中是否有这样的应用目前还不清楚。由此可以看到,spring 中大量使用了事件,联想到了观察者模式、消息队列、消息通知、web 请求响应、窗口点击事件等。原创 2023-03-11 17:06:28 · 1558 阅读 · 2 评论 -
spring boot(2.4.x 开始)和spring cloud项目中配置文件加载顺序 spring-cloud-starter-bootstrap Marker
从 spring boot 2.4.x 开始,ConfigFileApplicationListener 标记为已过期,监听替换为BootstrapConfigFileApplicationListener(继承了 ConfigFileApplicationListener 作为过渡),用 ConfigDataEnvironmentPostProcessor (EnvironmentPostProcessor 的实现类)代替用于加载配置。在此版本中专门重写了文件加载相关的功能。在启动时添加 vm 参数。原创 2024-02-08 15:21:30 · 1085 阅读 · 0 评论 -
spring boot和spring cloud项目中配置文件application和bootstrap中的值与对应的配置类绑定处理
这样参数的顺序正好对应起来最后匹配 bootstrap 值的问题,例如项目中使用了 nacos 中的配置中心功能,很多参数不需要在项目中进行配置,在 nacos 中进行指定就可以,但是 nacos 中的配置参数与项目是隔离的。加载完文件转换为 Environment 中对应的值之后,接下来需要将对应的值与对应的配置类进行绑定,方便对应的组件取值处理接下来的操作。以迭代器中的值顺序为准与 cache 中进行比对,返回对应的配置类,然后再将对应的配置属性从对应的配置文件中获取。可以发现,对应配置值顺序如下。原创 2024-02-07 17:52:49 · 1796 阅读 · 0 评论 -
spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序
综合上述表述,如果引入了 BootstrapApplicationListener 则优先加载,但是在源码中发现如下正好对应了我们平时写的 spring boot 启动类,可知,在启动时,如果引入了 spring cloud 组件,会先创建一个子容器来加载对应的配置,然后传递到父容器中进行参数传递,完成参数加载。原创 2024-02-07 15:51:01 · 1354 阅读 · 0 评论 -
spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用
为了防止理解问题,pom.xml 版本依赖如下日常开发中经常使用的配置文件有 application 和 bootstrap(日志相关的例外不做讲解),对应的配置文件后缀分别为 properties 或者 yml(yaml),区别如下。原创 2024-02-06 17:56:44 · 937 阅读 · 0 评论 -
spring boot和spring cloud项目中配置文件application和bootstrap加载顺序
在前面的文章基础上日志配置如果引用了 spring cloud 的组件且有 bootstrap 和 application 相关文件,启动日志如下如果 bootstrap 相关文件存在,先加载,然后再加载 application 相关文件。对应引用了 spring cloud 组件。如果 bootstrap 相关文件不存在,加载 application 相关文件。对应未引用 spring cloud 组件。原创 2024-02-07 09:31:08 · 1156 阅读 · 0 评论 -
spring mvc的HandlerInterceptor的原理以及使用场景
近期在面试的时候问到了 spring mvc 的 HandlerInterceptor,用过但是没深入,记录一下。以下代码为 spring boot 2.7.15 中自带的 spring 5.3.29如下为 DispatcherServlet 中的 doDispatch()其中通过 HandlerExecutionChain、HttpServletRequest、HttpServletResponse、HandlerAdapter、HandlerExecutionChain 来进行请求处理。原创 2024-01-21 21:11:32 · 907 阅读 · 0 评论 -
spring cloud netflix hystrix的替代产品
spring cloud 整合了 netflix 的一个很多的熔断处理的组件,即 hystrix。但是在最后一个版本 1.5.18 在 2018.11.16 发布后,进入了维护模式,即没有新特性对外发布了,即使有问题也只能那样了。原创 2024-01-19 14:25:37 · 1231 阅读 · 0 评论 -
spring boot 2.x升级为spring boot 3.x中数据库连接池druid的问题
针对项目中的问题很多,尤其是 spring boot 3 带来的变化大,针对一些问题,需要从源码层次入手看问题。之前整理的升级相关的文章参考链接。原创 2024-01-06 20:07:10 · 1470 阅读 · 0 评论 -
spring cloud openfeign 使用注意点
定义的接口类中的方法中,修饰符是否添加有下面的情况如果不声明修饰符,默认是 public abstract,对应的值为 1025。如果声明修饰符 default,默认是 public,对应的值为 1。为了防止 feign 调用出现一些其他未知的问题,还是不添加修饰符为好。原创 2023-11-18 00:33:45 · 785 阅读 · 0 评论 -
springboot中没有主清单属性解决办法
一般这个问题是没加 spring-boot-maven-plugin 插件的问题,但是项目中已经加了。在执行一个 spring boot 启动类时,提示。原创 2023-11-05 18:18:33 · 269 阅读 · 0 评论 -
spring技术体系的演进史
最开始使用 spring 的时候,发现这个特别好用,最主要是把那些对象创建之前通过关键字 new 创建的方式把那些交给 spring ioc 容器来处理,其中 spring 还是使用了工厂模式来创建对应的对象。然而这个时候需要自己写一堆配置,可能是使用 spring 的开发人员感觉这些配置麻烦,就有了后面的 spring boot。原创 2023-11-04 17:49:54 · 221 阅读 · 0 评论 -
spring与spring boot升级官方指导文档 spring-cloud spring-cloud-alibaba
spring boot 升级时会顺带把 spring 组件的版本给一块升级了。原创 2023-11-03 15:04:43 · 733 阅读 · 0 评论 -
java项目运行时信息获取
大体思路如下,想要获取启动时处理器数量、jvm 相关信息,操作系统信息、运行机器信息。原创 2023-10-21 23:04:06 · 1118 阅读 · 0 评论 -
spring boot 配置加载顺序
从第3开始,加载 properties 文件中的配置,接下来第5步加载操作系统环境变量,第6步加载系统属性,第11步加载命令行参数。如果 properties 和 yaml 文件都存在,properties 文件优先。原创 2023-10-21 20:09:21 · 729 阅读 · 1 评论 -
spring的bean初始化策略
如果当前没有使用 GraalVM 镜像环境,AbstractAutowireCapableBeanFactory 中指定 instantiationStrategy 的值为 CglibSubclassingInstantiationStrategy,即默认创建对象使用的是 cglib。GraalVM 原生镜像通过启动时设置参数指定 org.graalvm.nativeimage.imagecode,不指定默认为 false。原创 2023-09-23 22:54:06 · 166 阅读 · 0 评论 -
spring mvc中DispatcherServlet关键对象
HandlerMapping HandlerMethod HandlerAdapter HandlerExecutionChain原创 2023-10-02 19:29:43 · 641 阅读 · 0 评论 -
spring中AbstractApplicationContext的refresh()
这个部分的源码看的次数不计其数了,每次看不同开源组件的调用过程中走到这里都有不同的收获。spring 中 AbstractApplicationContext 的 refresh() 是 spring 的核心,几乎所有的逻辑都在是这里间接被调用。如下源码为 spring boot 2.7.15 自带的 spring 5.3.29通过 WebApplicationType 判断是哪个环境判断逻辑如下。原创 2023-09-23 22:49:57 · 233 阅读 · 0 评论 -
jackson 针对null值个性化处理
jackson 针对null值个性化处理原创 2023-09-21 17:30:41 · 45 阅读 · 0 评论 -
spring mvc中WebMvcConfigurationSupport WebMvcConfigurer WebMvcConfigurerAdapter 区别
三个类都位于其中 WebMvcConfigurer 是一个接口,WebMvcConfigurerAdapter 是抽象类,WebMvcConfigurationSupport 是普通类。原创 2023-09-21 17:18:21 · 232 阅读 · 0 评论 -
spring spring-boot spring-cloud spring-cloud-alibaba之间版本对应关系
从 spring 6.0 开始使用 jdk 17 进行编译对应的相关 servlet 容器(tomcat、undertow、jetty等)的 servlet 规范转移到 eclipse,实现按照 jarkarta ee 9 来引入,即包名前缀从 javax 变为 jarkarta。原创 2023-09-09 17:08:18 · 732 阅读 · 0 评论 -
spring cloud openfeign中@RequestMapping和@FeginClient注解不能同时使用的问题
仿照 SpringMvcContract 新建一个类,例如 CustomSpringMvcContract,将 SpringMvcContract 代码全部复制过来,然后把 SpringMvcContract 对应的代码替换为 CustomSpringMvcContract,processAnnotationOnClass() 中最后的代码做一下调整。项目之前运行没问题,考虑到这个问题是升级的问题导致的,可以通过修改 feign 的契约来实现,正好发现了一篇文章是讲这个的。原创 2023-09-04 16:29:28 · 708 阅读 · 0 评论 -
一个 SpringBoot 项目能处理多少请求
首先,这个问题有坑,因为 spring boot 不处理请求,只是把现有的开源组件打包后进行了版本适配、预定义了一些开源组件的配置通过代码的方式进行自动装配进行简化开发。这是 spring boot 的价值。使用 spring boot 进行开发相对于之前写配置文件是简单了,但是解决问题麻烦了,对于刚入手的开发人员没接触过很多项目的是友好的,但是在实际开发中遇到的问题是多种多样的,然而解决这些问题需要了解内部的运行原理,这个需要看相应的源码,有时需要对现有的自动装配进行自定义处理。原创 2023-07-29 19:37:53 · 534 阅读 · 0 评论 -
spring RestTemplate通过post方式添加请求头和参数
spring RestTemplate通过post方式添加请求头和参数原创 2023-06-02 10:22:35 · 805 阅读 · 0 评论 -
spring的MergedBeanDefinitionPostProcessor
spring的MergedBeanDefinitionPostProcessor原创 2023-04-23 11:24:27 · 57 阅读 · 0 评论 -
spring 的 @Conditional
spring 的 @Conditional原创 2023-03-25 23:48:24 · 54 阅读 · 0 评论 -
java 事件处理机制 观察者模式
java 事件处理机制 观察者模式原创 2023-03-11 01:31:23 · 323 阅读 · 0 评论 -
spring boot官方文档
spring boot官方文档原创 2023-03-10 14:02:29 · 92 阅读 · 0 评论 -
spring中生成的bean的形式
spring中生成的bean的形式原创 2023-03-09 12:42:01 · 149 阅读 · 0 评论 -
spring @Configuration 注解理解
看代码 proxyBeanMethods() 的默认值是 true,看注释的意思是默认使用 cglib 生成代理类,如果设置为 false,禁止使用 cglib,返回的是一个普通 java 对象。每次调用@Bean标注的方法获取到的对象是一个新的bean对象,和之前从IOC容器中获取的不一样,SpringBoot会跳过检查这个组件是否在容器中是否存在,保持组件的多实例。通过代码得知,proxyBeanMethods 设置为 true 时,采用的是 full 模式,通过 cglib 生成代理对象。原创 2023-03-09 12:23:14 · 362 阅读 · 0 评论 -
spring boot 自动装配注解 @ConditionalOnXXX
spring boot 自动装配注解原创 2023-03-05 23:19:33 · 441 阅读 · 0 评论 -
java @Autowired @Resource @Inject 三个注解的区别
有两个重要的属性,name 和 type,spring 将 name 属性解析为 bean 的名字,type 解析为 bean 的类型。如果同时指定了 name 和 type,从 spring 上下文中找到唯一匹配的 bean 进行装配,找不到抛出异常。如果指定了 type,则从上下文中查找类型匹配的 bean 进行装配,找不到或者找到多个抛出异常。如果指定了 name,则从上下文中查找名称匹配的 bean 进行装配,找不到抛出异常。在 spring 中,@Inject 和 @Autowired 相同。原创 2023-03-04 22:40:43 · 2605 阅读 · 4 评论 -
Elasticsearch与spring data组件对应关系
Elasticsearch与其他组件对应关系原创 2022-12-09 16:56:50 · 600 阅读 · 0 评论