spring
文章平均质量分 87
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
40 个 SpringBoot 常用注解:让生产力爆表!
本次课程总结了Spring Boot中常见的各类型注解的使用方式,让大家能够统一的对Spring Boot常用注解有一个全面的了解。原创 2022-10-23 08:25:56 · 436 阅读 · 0 评论 -
牢记16个有用的 SpringBoot 扩展接口
我们从这些的扩展点当中,大致可以窥视到整个bean的生命周期。在业务开发或者写中间件业务的时候,可以合理利用spring提供给我们的扩展点,在spring启动的各个阶段内做一些事情。以达到自定义初始化的目的。此篇总结,如果有错误或者疏漏的地方,恳请指正。原创 2022-10-23 07:43:05 · 1522 阅读 · 0 评论 -
阿里巴巴为什么不建议直接使用Async注解?
对于异步方法调用,从Spring3开始提供了@Async注解,该注解可以被标在方法上,以便异步地调用该方法。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。在项目应用中,@Async调用线程池,推荐使用自定义线程池的模式。自定义线程池常用方案:重新实现接口AsyncConfigurer。应用场景同步:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步:异步调用则是只是发送了调用的指令原创 2021-08-30 19:38:50 · 163 阅读 · 0 评论 -
MyBatis 架构与原理
MyBatis功能架构设计 框架架构 MyBatis核心类 MyBatis成员层次&职责 MyBatis功能架构设计功能架构讲解:我们把Mybatis的功能架构分为三层:(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库..原创 2021-08-07 10:17:27 · 157 阅读 · 0 评论 -
一个 TCP 连接可以发多少个 HTTP 请求
曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?要搞懂这个问题,我们需要先解决下面五个问题: 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开? 一个 TCP 连接可以对应几个 HTTP 请求? 一个 TCP 连接转载 2021-07-26 18:59:22 · 212 阅读 · 0 评论 -
从源码分析Hystrix工作机制
一、Hystrix解决了什么问题?在复杂的分布式应用中有着许多的依赖,各个依赖都难免会在某个时刻失败,如果应用不隔离各个依赖,降低外部的风险,那容易拖垮整个应用。举个电商场景中常见的例子,比如订单服务调用了库存服务、商品服务、积分服务、支付服务,系统均正常情况下,订单模块正常运行。但是当积分服务发生异常时且会阻塞30s时,订单服务就会有部分请求失败,且工作线程阻塞在调用积分服务上。流量高峰时,问题会更加严重,订单服务的所有请求都会阻塞在调用积分服务上,工作线程原创 2021-07-17 17:05:42 · 133 阅读 · 0 评论 -
微服务SpringCloud中的负载均衡
1.什么是负载均衡首先我们来看看维基百科对负载均衡的说明:负载平衡(Load balancing)是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题。举个例子来原创 2021-06-23 21:09:20 · 556 阅读 · 0 评论 -
Arthas 定位 Spring Boot 接口超时
背景公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。最近在优化接口的响应时间,优化了代码之后,但是时间还是达不到要求;有一个诡异的100ms左右的耗时问题,在接口中打印了请求处理时间后,和调用方的响应时间还有差了100ms左右。比如程序里记录150ms,但是调用方等待时间却为250ms左右。下面记录下当时详细的定位&解决流程(其实解决很简单,关键在于怎么定位并找到解决问题的方法)定位过程分析代码渠道系统是一原创 2021-06-23 20:55:42 · 303 阅读 · 1 评论 -
Spring IOC容器BeanFactory 和 ApplicationContext
1. 引言Spring框架附带了两个IOC容器–BeanFactory和ApplicationContext.BeanFactory是IOC容器的最基本版本,ApplicationContext扩展了BeanFactory的功能。那么本篇文章中,我们将通过实际例子了解这两个IOC容器之间的显著差异。2. 延迟加载 vs. 预加载BeanFactory 按需加载bean,而 ApplicationContext 则在启动时加载所有bean。因此,BeanFactory与Applicatio...原创 2021-02-08 13:36:07 · 191 阅读 · 0 评论 -
Spring 最常用的 7 类注解
随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。而spring的的注解那么多,可能做java很多年,都用不上。这里按照类型总结了这7种最常用的注解。一. 核心注解@Required此注解用于bean的setter方法上。表示此属性是必须的,必须在配置阶段注入,否则会抛出BeanInitializationExcepion。@Autowired此注解用于bean的f原创 2021-02-08 13:30:36 · 134 阅读 · 0 评论 -
SpringBoot使用AOP,动态数据源实现数据库读写分离
环境部署 数据库:MySql 库数量:2个,一主一从 关于mysql的主从环境部署,可以参考:https://juejin.im/post/5dd13778e51d453da86c0e6f开始项目首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖:<dependencies><dependency><groupId>com.alibaba<...原创 2020-09-22 07:52:57 · 741 阅读 · 0 评论 -
通过面试题简单了解Spring Cloud
个人博客请访问http://www.x0100.top为什么需要学习Spring Cloud不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用。但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂。这就会给应用带来如下的几个问题: 代码结构混乱:业务复杂,导致代码量很大,管理会越来越困难。同时,这也会给业务的快速...原创 2020-04-29 11:17:47 · 297 阅读 · 0 评论 -
Spring Cloud中使用Feign(十二)
首先还是需要去们的Spring Cloud服务管理框架Eureka简单示例(三)这篇博客底部拿到源码,这是一个最微型的集群。为了符合后面的测试,先把eureka-provider项目com.init.springCloud包下的ProviderApp类修改成按照端口启动:package com.init.springCloud; import java.util.Scanner;...原创 2020-04-08 17:48:49 · 382 阅读 · 0 评论 -
OpenFeign之feign使用简介(十一)
个人博客请访问http://www.x0100.topfeign中实体类和JSON字符串的转换和传输首先拿到OpenFeign之第一个Feign程序(十)这篇博客底部的源码,分别运行三个项目的**App类里面的main方法,启动三个项目。实际上我们已经在这篇博客中做到了返回一个实体类的JSON字符串,并且在feign客户端将返回的实体类JSON字符串通过解码器转换成实体类。接...原创 2020-04-08 15:23:14 · 1140 阅读 · 0 评论 -
OpenFeign之第一个Feign程序(十)
个人博客请访问http://www.x0100.topFeign简介Feign是一个Java到HTTP客户端绑定器,它的灵感来自于Retrofit,JAXRS-2.0和WebSocket。Feign的主要目的是将绑定命名的复杂性降低到HTTP api不去考虑rest的复杂性。Feign使用像Jersey和CXF这样的工具来编写Rest或SOAP服务的java客户端。此外,F...原创 2020-04-08 14:24:28 · 313 阅读 · 0 评论 -
Spring Boot注解大全,一键收藏了!
个人博客请访问http://www.x0100.top一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序...原创 2020-04-07 21:25:23 · 197 阅读 · 0 评论 -
具有负载均衡功能的RestTemplate底层原理(九)
个人博客请访问http://www.x0100.top解读在Spring Cloud服务管理框架Eureka简单示例(三)章节中,我们在服务调用端已经使用RestTemplate做了负载均衡,这里就详细解释一下RestTemplate底层原理,为什么一个Spring提供的做为Rest风格客户端的方法,在加了一个Ribbon提供的@LoadBalanced注解后,就能实现负...原创 2020-04-03 16:55:49 · 825 阅读 · 0 评论 -
Spring Cloud中使用Ribbon(八)
个人博客请访问http://www.x0100.top用注解和配置文件的方式引用Spring Cloud整合的Ribbon1.准备工作为了实现负载均衡的效果,我们使用Spring Cloud服务管理框架Eureka简单示例(三)底部的源代码稍加修改使用(如果下面的内容看不懂,可以先查看上面这篇博文),eureka-provider需要启动两个实例,修改启动类Provi...原创 2020-04-03 09:56:15 · 183 阅读 · 0 评论 -
Ribbon负载均衡器详细介绍(七)
个人博客请访问http://www.x0100.topLoadBalancer的简单轮询规则在上一篇博客中,我们使用Ribbon实现了负载,并且轮询请求了服务,我们就接着分析一下Ribbon里面实现负载均衡的LoadBalancer(负载均衡器),去看看它底层是怎么做的,以及这些请求规则如何配置。首先拿到我们上一篇博客中的ribbon-client项目,在com.ini...原创 2020-04-03 09:12:27 · 359 阅读 · 0 评论 -
Netflix之第一个Ribbon程序(六)
个人博客请访问http://www.x0100.topRibbon简介Ribbon是一个在云服务中久经沙场的客户端IPC库,它提供以下的一些特性:负载均衡 故障容错 在异步和动态的模型中支持多协议通讯(HTTP、TCP、UDP) 缓存与批处理引入Ribbon依赖,可以去Ribbon的maven仓库获取,下面是一个maven引入示例:<dependenc...原创 2020-04-02 18:21:22 · 441 阅读 · 0 评论 -
Spring Cloud之Eureka客户端健康检测(五)
个人博客请访问http://www.x0100.top在前面的博客中,我们知道一个最简单的Eureka微服务架构,也要由3个项目组成,当项目增多的时候,Eureka是怎么维护服务的呢?如何确保其中一个服务实例不能使用了,将它排除出去呢?由于整个演示过程还是Eureka的内容,我们首先从Spring Cloud服务管理框架Eureka简单示例(三)文章底部的源码链接拿到我们的示例...原创 2020-04-02 17:13:02 · 1800 阅读 · 0 评论 -
Spring Cloud服务管理框架Eureka项目集群(四)
个人博客请访问http://www.x0100.top紧跟上一篇博客,这里采用的也是上一篇博客的代码作为分析:Spring Cloud服务管理框架Eureka简单示例(三)。我们在搭建起了简单的单机模式Eureka项目之后,如果Eureka服务器和客户端不能满足高并发访问,项目需要集群部署,也可以利用Eureka做到这一点。我们这里创建两个Eureka服务器端,两个Eureka客户...原创 2020-04-02 16:25:20 · 200 阅读 · 0 评论 -
Spring Cloud服务管理框架Eureka简单示例(三)
个人博客请访问http://www.x0100.top关于Spring CloudSpring Cloud为开发人员提供了工具,可以快速构建分布式系统中的一些常见模式(譬如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领袖选举(字面翻译)、分布式会话、集群状态)。协调分布式系统致力于统一工作,并且使用Spring Cloud的开发人员可以快速地实现...原创 2020-04-01 18:33:52 · 238 阅读 · 0 评论 -
Spring Cloud (二)—Spring Boot的简单使用
个人博客请访问http://www.x0100.topSpring Boot的优点回顾一下我们如何搭建一个SSM(Spring,Spring MVC,MyBatis)web框架,配置web.xml,将权限交给Spring,设置Spring容器的配置文件application.properties,开启自动扫包、配置数据库文件、引用数据源、文件资源过滤等等一系统繁琐的操作之后,我...原创 2020-04-01 15:22:30 · 230 阅读 · 0 评论 -
Spring Cloud介绍与环境搭建(一)
个人博客请访问http://www.x0100.top前言使用Spring Cloud需要用到Spring boot的知识,如果没有相关经验,请参考Spring Boot的简单使用(二),做一个简单的入门。Spring Cloud系列博客是基于MyEclipse开发工具的。LAMP项目传统的单体项目用一个LAMP结构就可以完成,L:Linux;A:Apache;M:My...原创 2020-04-01 14:55:27 · 1336 阅读 · 0 评论 -
SpringBoot配置文件放在jar外部
个人博客请访问http://www.x0100.topSpring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢?查询官网,可以得到下面的几种方案:通过命令行指定SpringApplication会默认将命令行选项参数转换为配置信息例如,启动时命令参数指定:java-ja...原创 2020-03-18 17:59:26 · 344 阅读 · 0 评论 -
注解@PostConstruct与@PreDestroy讲解
spring xml配置文件中可以配置init-method方法和destroy-method,注解配置的时候@PostConstruct等同于init-method,@PreDestroy等同于destroy-method。从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这...原创 2017-07-25 18:13:04 · 548 阅读 · 0 评论 -
property-placeholder源码解析
properties配置信息的加载Spring在启动时会通过AbstractApplicationContext#refresh启动容器初始化工作,期间会委托loadBeanDefinitions解析xml配置文件.protectedfinal void refreshBeanFactory() throws BeansException { if (hasBeanFac...原创 2017-07-25 17:27:43 · 617 阅读 · 0 评论 -
Spring配置property-placeholder标签解析
<context:property-placeholder>标签提供了一种优雅的外在化参数配置的方式,不过该标签在spring配置文件中只能存在一份!!!众所周知,Spring容器是采用反射扫描的发现机制,通过标签的命名空间实例化实例,当Spring探测到容器中有一个org.springframework.beans.factory.config.PropertyPlacehold...原创 2017-07-25 16:43:42 · 3063 阅读 · 0 评论 -
spring ApplicationListener实现Observer观察者模式
什么是ApplicationContext?它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 ApplicationContext则是应用的容器。Spring把Bean(object)放在容器中,需要用就通过get方法取出来。ApplicationEvent是个抽象类,里面只有一个构造函数和一个长整型的timestamp。...原创 2017-07-17 19:22:54 · 845 阅读 · 0 评论 -
spring内置ContextRefreshedEvent事件
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成,所以发生了空指针错误,解决方案如下:写一个类继承spring的ApplicationListener监听,并监控ContextRefreshedEvent事件(容易初始化完成事件)...原创 2017-07-17 19:18:13 · 1383 阅读 · 0 评论 -
spring中ClassPathXmlApplicationContext和FileSystemXmlApplicationContext的区别
Junit单元测试的时候有时候会提示找不到注入的类,一般情况下是配置文件位置导致,了解ClassPathXmlApplicationContext和FileSystemXmlApplicationContext在使用上的区别即可解决。ClassPathXmlApplicationContext默认文件路径是src下那一级classpath:和classpath*:的区别:cl...原创 2017-06-16 18:33:51 · 1885 阅读 · 0 评论 -
spring mvc国际化资源实现
springMVC给我们提供了国际化支持,简单来说就是设置整个系统的运行语言,然后根据系统的运行语言来展示对应语言的页面,一般我们称之为多语言。通过源码我们可以了解到springMVC对多语言的支持就是设置Locale的语言信息来实现的,只不过是设置了通过cookie、session等方式设置而已。springMVC多语言具体由拦截器LocaleChangeInterceptor,解析器Loc...原创 2017-06-16 18:54:45 · 425 阅读 · 0 评论 -
spring 获取Bean的几种方式
1.读取xml文件的方式,这种在初学入门的时候比较适用 。 ApplicationContextapplicationContext =newClassPathXmlApplicationContext("classpath:tt.xml"); ApplicationContextapplicationContext =newFileSystemXmlApplica...原创 2017-06-30 10:05:14 · 597 阅读 · 0 评论 -
spring配置datasource三种方式
1、使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用。<bean id="dataSource" class="org.springframework.jdbc.datasource...原创 2017-07-25 18:22:11 · 849 阅读 · 0 评论 -
spring BeanFactoryPostProcessor和BeanPostProcessor解析
BeanFactoryPostProcessor和BeanPostProcessor,这两个接口,都是spring初始化bean时对外暴露的扩展点。两个接口名称看起来很相似,但作用及使用场景却不同,分析如下:1、BeanFactoryPostProcessor接口该接口的定义如下:publicinterface BeanFactoryPostProcessor { /**...原创 2017-09-04 17:20:00 · 568 阅读 · 0 评论 -
Bean生成过程与BeanFactory ApplicationContext生命周期
spring 中有几种供 springbean 生存的容器: BeanFactory 、 ApplicationContext 、webApplicationContext 。由于 ApplicationContext 和 webApplicationContext 基本一样。所有这里就只介绍BeanFactory 和 ApplicationContext 。理解springBean 的生命周期主...原创 2017-09-04 17:40:00 · 526 阅读 · 0 评论 -
Spring中用了哪些设计模式
一:简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 He...原创 2019-07-18 07:37:23 · 389 阅读 · 0 评论 -
Spring中获取request的几种方法,及线程安全性
概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求...原创 2019-02-17 21:21:56 · 765 阅读 · 0 评论 -
Spring和SpringMVC父子容器关系初探
一、背景最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式。二、概念理解和知识铺垫在Spring整体框架的核心概念中,容器是核心...原创 2018-10-15 18:43:09 · 275 阅读 · 0 评论