Spring
文章平均质量分 57
杂货铺的小掌柜
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
eureka 客户端连不上注册中心
如果你确认你的配置都是对的,完全没毛病,然而eureka客户端还是连接不到注册中心(但是能连到默认的注册中心 ---- http://localhost:8761/eureka 端口),那么,请看一下是不是把配置文件中的 ‘defaultZone’ 写成了 ‘default-zone’,具体原因可以自行查看源代码:如果想搞的更明白一些,可以在下面这个地方(还是上图中的那个类)打个断点看一下:...原创 2018-11-16 11:19:06 · 4412 阅读 · 0 评论 -
zuul异常处理
注意,关于怎样在zuul中处理异常,网上有很多方法,本文只讲述其中的一种。首先,我们要知道以下几点:zuul中有一个默认的处理异常的filter,名为 SendErrorFilter,这个过滤器实际所做的工作只是将异常处理转发到了 ‘/error’ 这个路径上承接上一点,在springboot中,有一个默认的处理异常的controller,名为 BasicErrorControlle...原创 2019-01-16 13:14:59 · 6046 阅读 · 2 评论 -
原生feign的使用之一(post请求 + body)
注意:本文讲的是原生feign,不是结合spring使用feign场景描述在开发的时候遇到一个问题:由于种种原因,需要使用原生feign发起一个post请求,请求体是json格式。解决方案见 https://github.com/OpenFeign/feign 的 readme 中 Encoders 部分测试先启一个服务,代码很简单 @PostMapping(value = "/address/create") @ResponseBody public St原创 2020-05-28 21:12:46 · 6457 阅读 · 0 评论 -
spring cloud zuul ratelimit 学习笔记
spring cloud zuul ratelimit原创 2022-06-24 14:29:22 · 169 阅读 · 0 评论 -
解决spring cloud启动报HystrixTimeoutException的问题
解决spring cloud启动报HystrixTimeoutException的问题原创 2023-02-08 12:17:47 · 1500 阅读 · 0 评论 -
使用 @ConfigurationProperties 注入配置信息之二
接上一篇博客 使用@ConfigurationProperties 注入配置信息之一 ,本文继续讲@ConfigurationProperties相关知识 在上一篇博客中,我们的属性配置类FooProperties通过使用@ConfigurationProperties注解实现了配置信息的注入;然后又通过使用@EnableConfigurationProperties注解才使得配置bean...原创 2018-04-03 15:10:40 · 17832 阅读 · 0 评论 -
使用 @ConfigurationProperties 注入配置信息之一
上一篇博客(使用@Value注入配置信息)的结尾我们说了,对于属性特别多的bean以及bean的属性之间有层次继承关系的情况,不太适合使用@Value来注入配置信息,为此,spring boot 为我们提供了 @ConfigurationProperties 这个注解来解决这个问题。下面来看一下这个注解的用法:首先看配置文件# ConfigurationProperties 学习,见 ...原创 2018-04-03 14:34:04 · 9985 阅读 · 0 评论 -
tkmapper中自定义的typehandler不生效的问题
请在字段上添加@ColumnType注解。例如:原创 2020-03-18 09:23:29 · 3022 阅读 · 1 评论 -
使用logback为springboot项目做日志记录
在resources目录下新建 logback-spring.xml 文件,内容如下:<?xml version="1.0" encoding="UTF-8"?><configuration> <!-- 存放日志文件的目录 --> <property name="LOG_HOME" value="/var/log&q原创 2018-08-24 12:55:01 · 630 阅读 · 0 评论 -
CommandLineRunner和ApplicationRunner接口的作用
如果想要在SpringApplication启动后做一些事情,我们可以实现CommandLineRunner或者ApplicationRunner接口。这2个接口都提供了一个run方法,这个run方法会在SpringApplication.run(…)完成之前被调用。先看一下这2个接口(它们区别不大):然后看一个例子:另外,需要注意的是,我们可以同时使用多个实现了上述2个(任一)接口的b...原创 2018-11-24 11:08:58 · 1895 阅读 · 0 评论 -
自定义springboot项目的banner
注意:本文仅供娱乐默认情况下,spring boot项目启动的时候会打印出这样一个效果:实际上,这个效果是可以自定义的,具体怎么做,其实很简单,我们可以在classpath下面放上一个名为banner.txt的文件,里边放入想要打印出来的内容,例如:启动项目,查看打印效果:当然,还可以在classpath下面放上一个名为banner.gif或者banner.png或者banner.j...原创 2018-11-21 22:39:19 · 288 阅读 · 0 评论 -
@ConfigurationProperties 注解结合 @Bean 实现为第三方组件注册配置信息
@ConfigurationProperties 除了能在类级别上使用之外(如:使用 @ConfigurationProperties 注入配置信息之二 和 使用 @ConfigurationProperties 注入配置信息之一),还可以结合被 @Bean 标注的公共方法,尤其是当我们需要把配置信息绑定到第三方组件上的时候,比如说数据源的配置。配置文件中的数据源信息如下# 通常不...原创 2018-04-03 15:29:22 · 2143 阅读 · 0 评论 -
使用 @Value 注入配置信息
spring boot允许我们把配置信息外部化。由此,我们就可以在不同的环境中使用同一套程序代码。可以使用属性文件,yaml文件,环境变量,命令行参数来实现配置信息的外部化。可以使用@Value注解来将属性值直接注入到bean里边。也可以使用@ConfigurationProperties注解将属性值注入到结构化的对象里边。配置文件 application-dev.properties...原创 2018-04-03 13:58:26 · 2161 阅读 · 0 评论 -
解决LOGFILE_IS_UNDEFINED或者LOG_PATH_IS_UNDEFINED的问题
看一下你的logback-spring.xml文件里边有没有引入这个东西不要一股脑晕着头就引入了!建议看看下面这些文件的内容再决定怎么引入:原创 2021-12-03 13:21:01 · 1493 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之五
我们需要关注其中的2个:一个是有2个参数的构造方法,上文中我们追踪过程中,调的就是它,所以我们顺着追。这个构造方法唯一做的事情就是调用了父类的构造方法,所以重点就转移到父类。这个东西可以自己看下,其实并不是真正的线程池。注解,找不到的话,从类上找,找到的话,返回。的构造方法,这个父类也很重要,下一篇分析。方法,这个方法所做的入参是你写的标记有。属性的值,也就是你指定的线程池的名字。逐步分析下这个方法,首先,从方法上找。接口自定义的,都是在这里生效的。这个方法,获取默认的线程池。属性的值就是线程池的名字。原创 2025-04-19 14:35:58 · 293 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之六
这里边对返回值进行了判断,根据返回值的不同,走不同的分支,不管哪个分支,最终都是把任务交给了线程池。接着,如果没找到线程池的话,使用默认的线程池,代码如下,这里用到的是双重加锁检查。如果没找到线程池,就返回 null;如果找到了,判断类型是不是。方法,作用是获取线程池的名字,这是个抽象方法,子类。看到了吧,默认的用于执行一步任务的线程池的名字就是。有兴趣可以自己研究下。,是的话就直接返回,不是的话就用。再看下默认的线程池的名字。接上文,我们本文分析。原创 2025-04-19 14:36:15 · 594 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之一
而 SimpleAsyncTaskExecutor 其实不是真正意义的线程池,使用这个的话并不能实现线程复用,说白了,尽量别用它。看到了吧,就2个方法,一个返回线程池,另一个返回异常处理器,你可以通过实现这个接口并重写其中的这2个方法来进行自定义。可以看到,自定义的线程池的核心线程数是7,最大线程数是42,队列容量是11,线程名称前缀是。如果你就是不想用这2个注解,想自定义一个注解,那你就可以用这个属性来指定你自定义的注解。默认情况下,spring 会寻找一个关联的线程池,这个线程池要么是应用上下文中。原创 2025-04-19 14:34:34 · 490 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之二
这是一个配置类(被@Configuration标注了),里边就做了一个事儿:定义了一个类型为。从这个名字中的 internal 可以联想到,是不是可以自己定义一个。从本文开始,就正式进入源码追踪阶段了,上一篇的最后我们提到了。反正我是没试过,有兴趣可以试试。注解,解析完了存到成员变量里边供后面使用。方法,这个主要就是通过解析你自定义的。具体用啥,当然是用它的各种属性,比如。还有一点:定义的这个bean的名字是。而到底是导入哪一个,判断依据是。的源码之前,先看下它的父类。,这也是默认值,至于。原创 2025-04-19 14:34:56 · 364 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之三
这三个方法,看过前面文章的都知道是干嘛的了。,看这名字就知道转入AOP相关的知识了。这个方法,它里边的核心就是创建了一个。这个类了,下一篇文章我们来分析它。接上一篇,本文我们进入。原创 2025-04-19 14:35:21 · 229 阅读 · 0 评论 -
@EnableAsync+@Async源码学习笔记之四
到这里有人可能会疑惑,我从构造方法一路追过来,入参中的 asyncAnnotationTypes 里边就俩值。的方法,也就是你写的异步方法,当然,不仅仅是这2个注解,还有你自定义的注解。如果入参给了异常处理器,就将入参的异常处理器赋值给成员变量,否则就用默认的。方法中被调用了一次,就是在那一次中,传入了你自定义的注解。哪里还有我自定义的注解,不要着急,这个。这个构造方法,第一步,用一个。来存储 spring 的。第三行解析了你自定义的注解。下面这几行代码,就解析了。以及你自定义的异步注解。原创 2025-04-19 14:35:42 · 234 阅读 · 0 评论 -
spring注解汇总
不含 spring boot。原创 2025-02-27 16:44:40 · 327 阅读 · 0 评论 -
spring mvc源码学习笔记之十一
src/main/webapp/WEB-INF/web.xml 内容如下src/main/webapp/WEB-INF/app-servlet.xml 内容如下src/main/webapp/WEB-INF/templates/t01.html 内容如下src/main/webapp/WEB-INF/templates/t02.html 内容如下com.qs.demo.A_ControllerAdvice 内容如下com.qs.demo.controller.Firs原创 2025-01-13 19:41:52 · 970 阅读 · 0 评论 -
spring mvc源码学习笔记之十
这里只是说了个大概,要想非常清楚,还请自己研究下 servlet 3.0 的。我们学 java web 的时候就知道,servlet 容器会自动加载。,那应该也会被 servlet 容器加载,是不是这样呢?接口,这就决定了在 servlet 容器启动的时候。这个类实现了 servlet 3.0 的。方法会被自动触发,而在。而完成这个加载工作的是。被容器带起来的过程。原创 2025-01-08 17:50:13 · 471 阅读 · 0 评论 -
spring mvc源码学习笔记之九
在前面的文章中,我们简单讲了可以用接口去替换web.xml。本文对这一块再做个详细讲解。在这个接口的 javadoc 中有提到可以用继承的方式替换实现接口。先看代码,然后再具体解释。原创 2025-01-08 17:49:16 · 777 阅读 · 0 评论 -
spring mvc源码学习笔记之八
本文说点儿简单的。如果你想研究基于 XML 配置的 spring mvc 的话,可以简单扫一眼本文。在基于 XML 配置的 spring mvc 开发中,我们主要就是通过 spring 提供的各种标签来配置。但是,大家是不是都有个疑问,spring 到底给我们提供了多少标签?都有哪些?子元素有哪些?属性有哪些?当然,如果你对 XML 非常熟悉,那简单,直接看对应模块的 schema 文件就行了。比如在 sping-webmvc 模块的 META-INF/spring.schemas 文件中就定义了原创 2025-01-08 17:47:52 · 1159 阅读 · 0 评论 -
spring mvc源码学习笔记之七
我们都知道,spring mvc 有处理器适配器、处理器映射器、视图解析器等几个非常重要的核心组件,学习 spring mvc 就是学习这些组件。忘了说了,一直说处理器映射器、处理器适配器、处理器异常解析器,还没说啥是处理器,其实就是我们写的。对应的应用上下文中没有找到对应的 bean 的时候,这里边的这些类可用作兜底,也就是作为默认值。啥叫默认的策略,可以简单说下,就是处理器适配器、处理器映射器、视图解析器这些组件的默认值。翻译一下:这个文件中的内容定义了。的,这没毛病,博主想说的是,大家可以仔细看看。原创 2025-01-08 17:45:58 · 593 阅读 · 0 评论 -
spring mvc源码学习笔记之一
src/main/webapp/WEB-INF/web.xml 内容如下src/main/webapp/WEB-INF/a.xml 内容如下src/main/webapp/WEB-INF/templates/t01.html 内容如下src/main/webapp/WEB-INF/templates/t02.html 内容如下com.qs.demo.FirstController 内容如下以上就是全部代码写这个例子只要是为了看 的无参构造方法。如下原创 2025-01-04 17:09:38 · 778 阅读 · 0 评论 -
spring mvc源码学习笔记之四
src/main/webapp/WEB-INF/web.xml 内容如下src/main/webapp/WEB-INF/app-context.xml 的内容如下src/main/webapp/WEB-INF/qs-servlet.xml 的内容如下com.qs.demo.root.PeopleService 的内容如下com.qs.demo.sub.PeopleController 的内容如下以上就是全部代码写这个例子主要是为了看父子容器这个事儿。上面的例子可以分原创 2025-01-04 17:12:57 · 1057 阅读 · 0 评论 -
spring mvc源码学习笔记之五
web.xml 内容如下src/main/webapp/WEB-INF/app1-servlet.xml 内容如下src/main/webapp/WEB-INF/app2-servlet.xml 内容如下com.qs.demo.s1.PeopleV1Controller 内容如下com.qs.demo.s2.PeopleV2Controller 内容如下以上就是全部代码写这个例子主要是想说一个知识点。也就是说我们平时用 spring mvc 的时候,都会配置一个 Di原创 2025-01-04 17:13:39 · 1313 阅读 · 0 评论 -
spring mvc源码学习笔记之六
com.qs.demo.MyWebApplicationInitializer 内容如下com.qs.demo.root.AppConfig 内容如下com.qs.demo.root.AppleService 内容如下com.qs.demo.sub.DispatcherConfig 内容如下com.qs.demo.sub.BananaService 内容如下com.qs.demo.sub.Demo01Controller 内容如下以上就是全部代码写这个例子主要原创 2025-01-04 17:15:44 · 832 阅读 · 0 评论 -
spring mvc源码学习笔记之三
src/main/webapp/WEB-INF/web.xml 内容如下src/main/webapp/WEB-INF/templates/t01.html 内容如下src/main/webapp/WEB-INF/templates/t02.html 内容如下com.qs.demo.FirstController 内容如下以上就是全部代码写这个例子主要是为了看名为 namespace 的 servlet init-param 。这个知识点是从 DispatcherServle原创 2025-01-04 17:12:25 · 846 阅读 · 0 评论 -
spring mvc源码学习笔记之二
src/main/webapp/WEB-INF/web.xml 内容如下com.qs.demo.A_ApplicationContextInitializer 内容如下com.qs.demo.Conf 内容如下com.qs.demo.FirstController 内容如下以上就是全部代码写这个例子主要是看名为 contextClass 的 servlet init-param 的用法。在上面的例子中,我们用 contextClass 指定了使用 AnnotationCon原创 2025-01-04 17:11:45 · 575 阅读 · 0 评论 -
怎样下载PDF版的Spring文档
进入spring官网,首页如下图:将鼠标指向顶部导航栏中的 ‘Projects’ 选项,如下图:在弹出的菜单中选择 ‘Spring Framework’,如下图:点击 ‘LEARN’,如下图:选一个版本,点击 ‘Reference Doc’,如下图:此时就找到了 spring framework 5.2.8 版本的文档,该文档的地址是https://docs.spring.io/spring/docs/current/spring-framework-reference/,如下图:.原创 2020-08-09 10:45:16 · 846 阅读 · 0 评论 -
validation-api中@GroupSequence的使用
考虑一种场景:一个bean有3个属性(假如说是attrA、attrB、attrC)需要做校验。默认情况下,validation-api对这3个属性的校验顺序是随机的。也就是说,可能先校验attrA,再校验attrB,最后校验attrC,也有可能先校验attrB,再校验attrC,最后校验attrA。那么,如果我们的需求是先校验attrA,再校验attrC,最后校验attrB。validation...原创 2020-03-04 21:06:42 · 2712 阅读 · 0 评论 -
3种方式干预 Spring 中 bean 的生命周期
第一种方式:JSR标准 该种方式通过JSR-250的标准,也是建议使用的。具体讲,我们可以通过JSR的 @PostConstruct 和 @PreDestroy 这2个注解在bean的初始化完成和销毁之前实现一些逻辑操作。下面是我们定义的 beanpublic class FooBean { private static final Logger logger = Lo...原创 2018-04-03 12:13:47 · 559 阅读 · 0 评论 -
组装多个@Configuration组件
在系统中,我们往往会根据业务逻辑的层次化或模块化对系统不同模块进行划分,于是,针对不同的层次或者模块,就会有不同的配置信息,当我们要用到这些层次或者模块的配置信息的时候,是不是就得将需要用到的每一个配置到引入呢?这样做当然没问题,但是我们有更好的做法。下面,我们以三个例子来具体讲解:第一个例子注意,该例子简单却不使实用。@Configurationpublic class C...原创 2018-04-03 16:10:17 · 4536 阅读 · 0 评论 -
Spring 中的国际化资源文件
注意:本文介绍的 ResourceBundleMessageSource 只能从classpath下加载资源文件。要想自定义资源文件的位置,可以使用 ReloadableResourceBundleMessageSource。classpath路径下的资源文件文件名: format.properties文件内容: message.source.name=Jack文件名: ...原创 2018-04-04 15:51:56 · 1649 阅读 · 0 评论 -
Spring 异常处理之 HTTP 状态码
关于spring的异常处理,官方博客已经讲的非常清楚了。另外,该博客中提到的一个例子也是写的非常好的。而本文是学习了官方博客和其中的例子之后,个人的学习总结。 需要指出的是,本文的异常处理不是针对REST类型的系统的,REST类型的系统的异常处理在会在博主的其他文章中讲解。Spring的异常处理有3种形式,可以总结如下:将异常对象映射为HTTP状态码(@ResponseStat...原创 2018-04-04 22:02:16 · 9147 阅读 · 0 评论 -
Spring 异常处理之本地处理
承接上文Spring 异常处理之 HTTP 状态码,本文介绍spring异常处理的第二种方式。为什么说这种异常处理方式叫本地处理,因为该方式是在Controller内部处理该Controller中的方法抛出的异常。需要注意的是,这种方式其实还可以细分为3种。具体见代码:注意,下面的方法在同一个controller中/** * 异常处理之 ExceptionHandler 之...原创 2018-04-04 22:24:45 · 902 阅读 · 0 评论 -
Spring 异常处理之全局处理
承接上文Spring异常处理之本地处理,本文介绍spring异常处理的第三种方式,也就是全局处理。为什么将该方式取名为全局处理,其实很简单,因为该方式本质上和本地处理是一样的,无非就是本地处理将异常处理方法或者说异常处理逻辑直接写在controller中,而全局处理其实就是把本地处理中的异常处理方法抽取出来,放到一个地方集中管理。控制器以及业务方法/** * 结合 GlobalE...原创 2018-04-04 22:44:02 · 1313 阅读 · 0 评论
分享