
spring
文章平均质量分 74
若鱼1919
简历修改、模拟面试、面试辅导
展开
-
Spring-Cloud-Gateway集成Nacos如何做负载均衡?
Spring-Cloud-Gateway集成Nacos的负载均衡原创 2023-03-06 11:15:36 · 1719 阅读 · 2 评论 -
Spring-Cloud-Gateway的过滤器的执行顺序问题
Spring-Cloud-Gateway中提供了3种类型的过滤器,分别是:路由过滤器、Default过滤器和Global过滤器,当同时存在这些过滤器的时候,他们的执行顺序是什么样子的?原创 2023-03-06 10:26:11 · 2516 阅读 · 0 评论 -
SpringBoot统一返回值与actuator的矛盾
SpringBoot统一返回值带来的问题原创 2022-06-24 09:25:15 · 905 阅读 · 0 评论 -
Logback自定义Pattern参数解析
需求要在打印的日志中都带上登录的用户名。最笨的办法:每一次日志打印的时候,手动添加上用户名可行的办法:拦截请求,把用户名写入到MDC,然后在Pattern中通过%X{username}进行打印装X的办法:拦截请求,把用户名写入到ThreadLocal,然后在Pattern中通过%u这中自定义的Pattern进行打印自定义Patternappend的配置<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"原创 2022-05-27 15:29:16 · 2655 阅读 · 0 评论 -
spring-data-jpa使用与原理解析
spring-data-jpa使用入门spring-data-jpa的使用非常简单:1.添加依赖2.添加EntityManager相关配置3.定义实体Bean,映射数据库表和字段4.编写业务Repository看个最简单的demo1.pom.xml<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</gr原创 2022-05-08 15:09:24 · 1217 阅读 · 0 评论 -
无用的知识点又增加了-关于Spring Bean的生命周期
问:请描述下Spring Bean的生命周期答:简单的说就3步:1、创建BeanDefination阶段2、创建Bean阶段3、销毁Bean阶段创建BeanDefination阶段1.BeanFactory通过xml、注解配置类创建BeanDefination2.通过BeanFactoryPostProcessor.postProcessBeanFactory()对BeanFination进行修改创建Bean阶段1.反射调用构造函数,创建初始化的Bean对象2.注入@Autowired原创 2022-04-30 10:23:37 · 1138 阅读 · 0 评论 -
无用的知识点又增加了-关于FactoryBean
问:如果在Spring中定义了一个FactoryBean,那么容器中会存在几个Bean?一个还是两个?写一段代码测试下:public class FactoryBeanTest { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.registerBean(Us原创 2022-04-30 09:34:22 · 341 阅读 · 0 评论 -
又见Druid:sql injection violation, multi-statement not allow
之前写过一篇关于这个问题的文章:https://blog.youkuaiyun.com/goldenfish1919/article/details/50600053最近在一个项目中又遇到这个问题了,道理在上篇文章中已经说得很清楚了,说一下这回遇到的问题。首先,项目是用jndi来连接的数据库,因此数据库的配置不是配置在应用程序里面的,比如${tomcat_home}/conf/context.xml:<Context> <WatchedResource>WEB-INF/web.xm原创 2020-12-01 09:30:21 · 1278 阅读 · 0 评论 -
Apollo配置中心客户端源码解析
配置中心在现在的分布式系统可以说是一个必不可少的核心组件了,国内使用最广泛的配置中心应该是携程开发的Apollo。Apollo的思想还是挺简单的,简单地说,服务端利用Eureka做高可用,配置信息存到数据库,客户端调用服务端的接口,拉取最新的配置,如果有变化,就更新客户端的配置。服务端提供了可视化的图形界面去修改配置,保存到数据库。我们今天先来看下客户端部分是如何来实现的。客户端的主要功能就是调用服务端接口,获取最新的配置,然后更新配置。由于apollo-client的代码还是比较复杂了,因此在它的基础上原创 2020-10-15 12:24:25 · 795 阅读 · 0 评论 -
spring-cloud-starter-openfeign源码解析
上文中我们讲了spring-cloud-starter-openfeign的使用,比起原生的openfeign的api好用了很多,本文我们就来看下它的源码。看下spring-cloud-openfeign-core:这里面对openfeign做了自动配置,其中FeignRibbonClientAutoConfiguration和FeignLoadBalancerAutoConfiguration显然是做负载均衡的,FeignHalAutoConfiguration是用来处理application/ha原创 2020-09-22 19:48:08 · 1170 阅读 · 0 评论 -
spring-cloud-starter-openfeign使用详解
首先还是把demo跑起来:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>添加注解@SpringBootApplication@EnableFeignClients//添加这个注解public c原创 2020-09-15 09:16:10 · 19637 阅读 · 1 评论 -
OpenFeign源码解析
feign的核心功能就是通过接口去访问网络资源,猜一下里面也是用动态代理来实现的,就跟Mybatis用接口去访问数据库一样,今天我们就来看下源码的处理,核心就一个包:<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId></dependency>先来看个demo://feign接口public in原创 2020-09-08 09:13:56 · 996 阅读 · 0 评论 -
OpenFeign使用详解
openfeign是一个java的http客户端,用来简化http调用,先看一个最简单的demo:这是服务端接口:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ return "hello"; }}openfeign是如何来调用这个接口的呢?public interface Demo { @RequestLine("原创 2020-08-31 21:00:51 · 8811 阅读 · 0 评论 -
spring-cloud-starter-netflix-hystrix使用详解
前面文中我们学习了hystrix的原生使用(hystrix入门-原生API使用)和注解使用(hystrix进阶-注解hystrix-javanica使用),本文来看下hystrix在spring-boot中的使用。首先还是先看个最简单的demo第一步:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netf原创 2020-08-24 09:16:41 · 15359 阅读 · 0 评论 -
SpringBoot 2.2和2.3异常处理的一个小变化
先看个有意思的现象:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ throw new RuntimeException("服务端异常,请稍后再试!"); }}在springboot2.2.0的时候,浏览器访问http://localhost:8080/hello,输出结果如下:换成springboot2.3.0的时候,输出原创 2020-08-18 08:57:07 · 1868 阅读 · 1 评论 -
hystrix进阶-注解hystrix-javanica使用
前一篇我们讲了hystrix原生api的使用,用起来还是比较复杂的,如果想让一个方法支持fallback还得去继承HystrixCommand,跟业务完全耦合到一起,对业务的侵入性太大了,显然不利于hystrix的使用,因此hystrix-javanica出现了,可以让应用以注解的方式更方便的来使用hystrix。先看个demo第一步:引入依赖<dependencies> <dependency> <groupId>com.netflix.hystrix&l原创 2020-08-16 15:12:26 · 719 阅读 · 2 评论 -
hystrix入门-原生API使用
熟悉spring-cloud的同学都知道,hystrix是用来做服务熔断降级用的,在Springloud中使用hystrix很简单,后面的文章中我们再演示,今天首先来看下原生的hystrix api是如何来使用的。hystrix入门demo<!--添加下这个依赖--><dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</原创 2020-08-10 09:17:58 · 648 阅读 · 0 评论 -
spring-boot-starter-logging源码解析
本文以2.2.0为例来说明下,首先还是打开jar包,不出所料,空空如也:然后打开autoconfigure的jar包,找到spring.factories,搜索logging:打开ConditionEvaluationReportLoggingListener,这里也没有配置使用哪一个log框架啊,没办法,只好看一下它的依赖:依赖了logback,同时还依赖了jul-to-slf4j和log4j-to-slf4j,我们知道logback是springboot默认使用的日志框架,那么后面这两个ja原创 2020-08-05 10:02:15 · 1970 阅读 · 3 评论 -
spring-boot-starter-data-redis源码解析与使用实战
我们以spring-boot-starter-data-redis-2.1.7为例,starter本身没有包含任何代码,只是引入了spring-data-redis的依赖,因此肯定是在spring-boot-autoconfigure中加了自动配置:我们就看下这几个配置类:其中RedisAutoConfiguration里面就配置了我们常用的RedisTemplate,RedisRepositoriesAutoConfiguration这里面是实现了spring-data规范的一些配置,RedisRe原创 2020-07-26 12:04:24 · 6711 阅读 · 0 评论 -
SpringBoot加载web项目流程源码解析
上一篇文章中我们写了一个极简版的SpringBoot,基本完成了Controller的映射和访问,真实的SpringBoot是如何来做的?我们以2.3.0.RELEASE版本的SpringBoot为例来看下它是如何一步一步创建内嵌的tomcat并且注册DispatcherServlet的,它是否跟上篇文章中讲的一样,也是利用了Servlet3.0的ServletContainerInitializer和WebApplicationInitializer呢? 友情提示:公众号的排版对源码的文章非常不友好,建原创 2020-07-20 09:36:29 · 434 阅读 · 0 评论 -
三分钟手写极简版SpringBoot-重复造个轮子
前一篇文章中(SpringMVC不使用web.xml如何配置及源码解析)我们讲了SpringMVC如何使用JavaConfiguration的方式进行配置,这个不就跟SpringBoot里面创建web项目是一样一样的吗?今天我们就来模拟一个极简版的SpringBoot。(1)添加依赖。<dependencies> <dependency> <groupId>org.springframework</groupId>原创 2020-07-14 09:22:50 · 288 阅读 · 0 评论 -
SpringMVC不使用web.xml如何配置及源码解析
SpringMVC在很久之前就不推荐使用web.xml作为项目的配置文件了,更推荐使用java configuration的方式,因为web.xml配置实在是太繁琐了,今天我们就来演示下如何使用更简单的java configuration的方式来配置SpringMVC,总共分3步,非常简单。第一步:添加入口类WebApplicationInitializer。首先需要在项目中添加一个WebApplicationInitializer的实现类,一般是继承AbstractAnnotationConfigDi原创 2020-07-06 09:20:19 · 1798 阅读 · 0 评论 -
Spring IOC的@Autowired、@Inject、@Resource的区别
使用过Spring的同学相信对这几个注解都已经很熟悉了,这几个都是用来做依赖注入的,我们挨个的来看一下。@Autowired@Autowired可以加在构造函数、方法、方法参数、成员变量、注解上,从Spring4.3开始,如果bean只有一个构造函数,或者只有一个primary/default的构造函数,那么构造函数上的@Autowired可以不加,否则还是要在某个构造函数上明确的加上@Autowired。源码如下:@Deprecated@Retention(RetentionPolicy.RUN原创 2020-06-27 09:43:57 · 302 阅读 · 0 评论 -
spring aop的@target与@within的真正区别到底是什么?
文档里面是这么说的:@target: Limits matching to join points (the execution of methods when using Spring AOP) where the class of the executing object has an annotation of the given type.@within: Limits matching to join points within types that have the given annot原创 2020-06-19 21:15:14 · 5980 阅读 · 1 评论 -
Spring的@Bean只能放在@Configuration里面吗?
首先来看几个问题:1.@Bean方法只能定义在@Configuration里面吗?2.@Bean方法定义在@Configuration里面和定义在@Component里面有啥区别?3.@Bean方法可以是private static的吗?4.@Bean方法啥时候必须得定义成static的?先说一下答案:只要是@Component注解修饰的类里面都可以定义@Bean,并且都可以注册到Spring容器里面。其实不仅仅是@Component,只要是被@Component修饰的注解同样原创 2020-06-13 18:00:01 · 1187 阅读 · 0 评论 -
Spring的Event事件处理使用详解
Spring中使用事件非常简单,只需要以下的几个步骤:1.定义事件,继承ApplicationEvent2.定义监听,要么实现ApplicationListener接口,要么在方法上添加@EventListener注解3.发布事件,调用ApplicationContext.publishEvent()或者ApplicationEventPublisher.publishEvent();下面我们就用一个例子来说下具体的用法:比如用户注册成功以后,系统要给用户发送一封邮件,同时还要给用户发放优惠券,原创 2020-06-08 09:59:31 · 7506 阅读 · 1 评论 -
Spring的@EnableScheduling与@Scheduled使用详解
首先来看下EnableScheduling的javadoc:@EnableScheduling启用了Spring的任务调度功能,这跟在xml中配置task:* 是一样的,它可以加在@Configuration上:@Configuration@EnableSchedulingpublic class AppConfig {// various @Bean definitions}下面的代码可以在容器中的bean上查找到@Scheduled注解,比如:package com.myco.task原创 2020-05-30 13:52:42 · 5017 阅读 · 0 评论 -
Spring的@EnableAsync与@Async使用详解
@EnableAsync的javadoc@EnableAsync可以让Spring启用异步方法执行,就跟在xml中配置task:* 效果是一样的。它可以跟@Configuration结合,让整个Spring环境启用基于注解的异步处理:@Configuration@EnableAsyncpublic class AppConfig {}比如下面的MyAsyncBean是一个用户自定义的Bean,它里面的方法上添加了@Async注解或者EJB 3.1 的@javax.ejb.Asynchronou原创 2020-05-23 14:31:49 · 8084 阅读 · 1 评论 -
Spring-Boot-Starter-AOP源码解析
打开spring-boot-starter-aop的jar包:里面一个类也没有,只是在pom中添加了几个依赖:<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.7.RE原创 2020-05-18 13:24:06 · 1037 阅读 · 0 评论 -
SpringAOP使用详解
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-ataspectj几个AOP相关的概念Aspect: 在SpringAOP中,切面就是一个普通的类,然后要么加上@Aspect注解,要么在xml中配置下,它里面包含了Advice和Pointcut。Joint point:程序执行的时候的某个点,比如执行方法的时候,抛出异常的时候,在SpringAOP中一般代表方法原创 2020-05-10 16:40:57 · 455 阅读 · 0 评论 -
Spring的@Import注解详解
首先看下@Import的javadoc文档:Provides functionality equivalent to the element in Spring XML. Allows for importing @Configuration classes, ImportSelector and ImportBeanDefinitionRegistrar implementations, ...原创 2020-04-26 13:34:33 · 357 阅读 · 0 评论 -
mockbatis-spring-boot-starter重复造轮子
前面两篇文章我们介绍了mybatis-spring-boot-starter的使用入门和源码解析,源码当中还是有很多地方值得我们去学习的,这篇文章我们就来实现一个自己的mockbatis-spring-boot-starter,回顾一下这里面的知识点。我们今天要实现的效果是这样的://类似于@Mapper@MockMapperpublic interface UserMapper { ...原创 2020-04-21 09:39:00 · 338 阅读 · 0 评论 -
MyBatis-Spring-Boot-Starter扫盲
springboot集成mybatis非常简单,只需要两部:(1)添加依赖:<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <vers...原创 2020-04-03 13:56:52 · 2115 阅读 · 1 评论 -
spring-data-mongodb是如何给collection创建索引的?
从spring-boot-autoconfigure开始堆栈如下:大致的逻辑梳理一下:系统启动的时候,spring-boot-autoconfigure根据spring.factories找那个配置的MongoDataAutoConfiguration去加载mongodb相关的配置,MongoDataAutoConfiguration这个类又会继续加载MongoDataCon...原创 2020-01-17 15:35:01 · 3590 阅读 · 2 评论 -
SpringBoot多Profile如何优雅打包?
原文在这里: SpringBoot多Profile如何优雅打包?一般项目的结构都是类似下面这种,有多个profile:其中,我们需要在application.yml中设置一个active的profile,如下:spring: profiles: active: dev这种方式,只需要在运行项目的时候设置–spring.profiles.active参数,如下:java ...转载 2019-09-03 19:47:07 · 2267 阅读 · 0 评论 -
Spring Boot集成MyBatis与分页插件
1.MyBatisConfig.java@Configuration@EnableTransactionManagementpublic class MyBatisConfig implements TransactionManagementConfigurer { @Autowired DataSource dataSource; @Bean(name = "原创 2016-06-18 16:46:42 · 26539 阅读 · 3 评论 -
spring3mvc如何把checkbox的值绑定到model对象的int数据类型
model对象:User.java:public class User { private int id; private String name; //0:男,1:女,页面上表现为radiobutton private int gender; private int age; //0:没毕业,1:已经毕业,页面上表现为checkbox private int gradute原创 2011-12-04 12:08:20 · 7121 阅读 · 1 评论