
Spring
文章平均质量分 52
纵然间
资深码农,编程十年有余,曾服务于多家互联网大厂。技术精湛,经验丰富,擅长解决复杂问题。对新技术充满热情,致力于创造卓越的产品体验
展开
-
为什么说 Java 程序员到了必须掌握 Spring Boot 的时候
Spring Boot 是基于 Spring 框架构建的,因此它与 Spring 生态系统中的其他组件(如 Spring MVC、Spring Security、Spring Data 等)具有良好的兼容性。由于 Spring Boot 的易用性和强大的功能,它在企业级应用中得到了广泛的应用。Spring Boot 能够简化开发流程、提供丰富的内置功能、支持微服务架构、拥有活跃的社区和丰富的资源、在企业级应用中广泛应用以及与 Spring 生态系统的良好兼容性。原创 2024-05-22 08:22:05 · 718 阅读 · 0 评论 -
微服务技术问答系列-NO3
持续集成(Continuous Integration,简称CI)是一种软件开发实践,要求开发团队频繁地将代码集成到共享的主干(版本控制仓库)中,并通过自动化的构建和测试流程,及时地发现和解决代码集成引入的问题。这种逐步推广的方式有助于开发者或运维团队更好地监控新版本的性能和稳定性,并在发现问题时及时进行调整和优化,从而确保整个系统的稳定性和可靠性。持续检查是指在软件开发过程中,通过自动化工具和技术对代码、测试用例和其他相关资产进行持续、频繁的验证和检查,以确保软件的质量和安全性。原创 2024-04-04 08:58:02 · 745 阅读 · 0 评论 -
微服务技术问答系列-NO2
在微服务架构中,每个服务都拥有自己的业务逻辑和数据流,语义监控通过对这些业务逻辑进行监控,可以实时地检测系统中的业务失败因素,并及时发出警报。例如,在一个基于微服务架构的在线商城系统中,端到端微服务测试会涵盖用户服务、商品服务和订单服务等多个微服务,并测试它们之间的交互和协作是否顺畅。举个例子,如果在开发过程中发现某段代码在多个地方被重复使用,那么根据DRY原则,应该考虑将这段代码提取出来,封装成一个服务或者库,然后在需要的地方调用这个服务或库,而不是在每个地方都重复编写相同的代码。原创 2024-04-04 08:54:44 · 833 阅读 · 0 评论 -
微服务技术问答系列-NO1
在单机数据库中,事务能够确保ACID(原子性、一致性、隔离性、持久性)特性,即一个事务是一个不可分割的工作单位,事务必须使数据库从一个一致性状态变换到另一个一致性状态,事务的执行不受其他事务的干扰,且在事务完成以后,它对于数据的修改是永久性的。在双因素身份验证过程中,用户除了需要提供传统的用户名和密码外,还需要提供第二种形式的身份验证,例如通过SMS或电子邮件发送的一次性密码(OTP),或者从身份验证器应用程序或硬件令牌派生的一次性密码。服务治理涉及到服务的路由、限流、熔断等策略的制定与实施;原创 2024-04-04 08:52:00 · 1141 阅读 · 0 评论 -
Spring框架知识点问答-NO10
Hystrix断路器是Hystrix库中的一个核心组件,它的主要作用是在分布式系统中对服务间的调用进行保护和控制,避免服务故障在系统中的扩散。在传统的单体应用中,应用程序的各个模块可以通过本地方法调用相互通信,但在微服务架构中,每个服务都是独立部署的,不同的服务需要通过网络协议进行通信,因此需要一种机制来使它们能够互相发现和通信,这就是服务注册和发现。然而,需要注意的是,虽然Hystrix是一个强大的工具,但在使用时也需要根据具体的业务场景和需求进行合理的配置和调整,以充分发挥其优势。原创 2024-04-03 08:22:42 · 593 阅读 · 0 评论 -
Spring框架知识点问答-NO9
在Spring Batch中,任务是批处理过程中要执行的工作单元,它可以是一个单独的任务或一个任务的集合。CSRF攻击,全称是跨站请求伪造(Cross-Site Request Forgery),是一种攻击者利用受害者已登录的身份,以受害者的名义执行非授权的操作的攻击方法。这种攻击可以在受害者毫不知情的情况下,以受害者名义伪造请求发送给受攻击站点,从而在受害者并未主动发起请求的情况下,完成攻击者指定的操作。AOP是OOP(面向对象编程)的延续,在软件开发中是一个热点,也是Spring框架中的一个重要内容。原创 2024-04-03 08:14:05 · 756 阅读 · 0 评论 -
Spring框架知识点问答-NO8
Actuator是一个用于监控和管理Spring Boot应用程序的模块,提供了许多端点(endpoints),这些端点可以通过HTTP请求进行访问,从而获取有关应用程序的各种信息,如健康状况、度量指标、配置信息等。这样,用户就可以为不同的环境创建不同的配置文件,并在运行时通过激活相应的Profile来加载对应的配置。通过JavaConfig,开发者可以更直观地管理和配置应用程序的组件,同时利用Java的编译时检查功能来避免一些常见的配置错误。与XML和JSON相比,YAML的语法更为简洁,可读性更强。原创 2024-04-03 08:09:57 · 328 阅读 · 0 评论 -
Spring框架知识点问答-NO7
另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Applicatioin contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath,因为这个容器将在classpath里面查找bean的配置。原创 2024-04-02 09:50:56 · 342 阅读 · 0 评论 -
Spring框架知识点问答-NO6
通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层。Spring 通过提供ORM模块,支持我们在直接JDBC之上使用一个对象/关系映射(ORM)工具,Spring 支持集成主流的ORM框架,如Hiberate,JDO和iBATIS SQL Maps。这是基于Spring模块,提供spring框架的基础功能,BeanFactory是任何以spring为基础的应用的核心。原创 2024-04-02 09:07:25 · 274 阅读 · 0 评论 -
Spring框架知识点问答-NO5
然后根据该URI,调用HandlerMapper获得该Hander配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExceutionChain对象的形式返回。异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO跑出的)转化为一致的unchected异常。After(finally):这些类型的Advice在连接点方法之后执行,无论方法退出是正常还是异常返回,并使用@After注解标记进行配置。原创 2024-04-02 08:23:13 · 758 阅读 · 0 评论 -
Spring框架知识点问答-NO4
AOP(Aspect-Oriented Programming), 即面向切面编程,它与OOP(Object-Oriented Programming,面向对象编程)相辅相成,提供了与OOP不同的抽象软件结构的视角。在OOP中,以类(class)作为我们的基本单元,而AOP中的基本单元是Aspect(切面)。Spring DAO 使用JDBC,Hibernate或JDO这样的数据访问技术更容易以一种传统的方式工作。程序运行中的一些时间点,例如一个方法的执行,或者是一个异常的处理。原创 2024-04-02 08:18:48 · 427 阅读 · 0 评论 -
Spring框架知识点问答-NO3
此注解仅指示必须在配置时使用bean定义中的显式属性值或使用自动装配填充受影响的bean属性。只有将bean用作另一个bean的属性时,才能将bean声明为内部bean。当创建多个相同类型的bean并希望仅使用属性装配其中一个bean时,可以使用@Qualifier注解和@Autowired通过指定应该装配哪个确切的bean来消除歧义。不使用XML来描述bean装配,开发人员通过在相关的类,方法或字段声明上使用注解将配置移动到组件类本身。它匹配并装配其属性与XML文件中由相同名称定义的bean。原创 2024-04-02 08:17:06 · 403 阅读 · 0 评论 -
Spring框架知识点问答-NO2
Portlet规范定义了全局Session的观念,它被所有构成某个portlet web 应用的各种不同的portlet所共享。Global-session : 类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Session :每一次HTTP请求都会产生一个新的Bean,同时该Bean 仅在当前Http session内有效。3.如果bean实现BeanNameAware接口,则工厂通过传递Bean 的ID来调用setBeanName()。原创 2024-04-02 08:15:28 · 523 阅读 · 0 评论 -
Spring框架知识点问答-NO1
它是轻量级、松耦合的。它具有分层体系结构,允许用户选择组件,同时还为J2EE应用程序开发提供了一个有凝聚力的框架。它可以集成其他框架,如Structs、Hibernate、EJB等,所以又称为框架的框架。容器通过读取提供的配置元数据来接受对象进行实例化,配置和组装的指令。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。JDBC异常-Spring的JDBC抽象层提供了一个异常层次结构,简化了错误处理策略。由于Spring Frameworks 的分层架构,用户可以自由选择自己需要的组件。原创 2024-04-02 08:11:49 · 750 阅读 · 0 评论 -
Innodb如何实现事务的
5、如果事务提交,那么则把RedoLog对象进行持久化,后续还有其他机制将Buffer pool 中修改的数据页持久化到磁盘中。1、Innodb在收到一个update语句后,会先根据条件查找数据所在的页,并将该页缓存在Buffer Pool中。2、执行update语句,修改Buffer Pool中的数据,也就是内存中的数据;3、针对update语句生成一个RedoLog对象,并存在LogBuffer中;4、针对update语句生成undolog日志,用于事务回滚。原创 2024-03-27 08:25:42 · 501 阅读 · 0 评论 -
理解Netty和Tomcat区别和特点
服务端启动时,通常会创建两个NioEventLoopGroup实例,对应了两个独立的Reactor线程池,bossGroup负责处理客户端的连接请求,workerGroup负责处理I/O相关的操作,执行系统Task、定时任务Task等。Tomcat是一个Web服务器,是一个Servlet容器,基本上Tomcat内部只会运行Servlet程序,并处理HTTP请求,而Netty封装的是底层IO模型,关注的是网络数据传输,而不是关系具体的协议,可定制性更高。3、内存池设计,申请的内存可以重用,主要指直接内存。原创 2024-03-27 08:20:23 · 604 阅读 · 0 评论 -
SOA、分布式、微服务之间关系
3、微服务是一种更彻底的面向服务的架构,将系统中各个功能个体抽成一个个小的应用程序,基本保持一个应用对应的一个服务的架构。1、分布式架构是将单体架构中的各个部分拆分,然后部署不同的机器或进程中去,SOA和微服务基本上都是分布式架构的。2、SOA是一种面向服务的架构,系统的所有服务都注册到总线上,当调用服务时,从总线上查找服务信息,然后调用。SOA、分布式、微服务之间关系。原创 2024-03-27 08:13:58 · 181 阅读 · 0 评论 -
MyBatis中#{}和${}区别
2、Mybatis在处理#{}时,会将SQL中的#{}替换为?号,调用PreparedStatement来赋值。3、Mybatis在处理${}时,就是把${}替换成变量的值,调用Statement来赋值。1、#{}是预编译处理、是占位符,${}是字符串替换、是拼接符。4、使用#{}可以有效的防止SQL注入,提高系统安全性。MyBatis中#{}和${}区别。原创 2024-03-27 08:12:39 · 92 阅读 · 0 评论 -
MyBatis的优缺点
1、基于SQL语句编程,相当灵活,不会对应用程序或数据库的现有设计造成任何影响,SQL单独写,解析SQL与程序代码的耦合,便于统一管理。3、很好的与各种数据库兼容(因为mybatic使用JDBC来连接数据库,所有只要JDBC支持的数据库MyBatis都支持);提供了对象关系映射标签,支持对象关系组件维护。1、SQL语句的编写工作量较大,尤其当字段多,管理表多时,对于开发人员编写SQL语句的功底有一定要求。2、与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;原创 2024-03-27 08:10:18 · 240 阅读 · 0 评论 -
SpringBoot中配置文件的加载顺序
5、jar包内部的application-{profile}.properties或application.yml带spring.profile)配置文件,再来加载不带profile;4、jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件;6、jar包外部的application.properties或application.yml(不带spring.profile)配置文件;3、操作系统环境变量;原创 2024-03-26 08:42:49 · 174 阅读 · 0 评论 -
SpringBoot是如何启动Tomcat的
2、在创建Spring容器过程中,会利用@ConditionalOnClass技术来判断当前classPath中是否存在Tomcat依赖,如果存在则会生成一个启动Tomcat的Bean。3、Spring容器创建完成之后,就会获取启动Tomcat的Bean,并创建Tomcat对象,并绑定端口等,然后启动Tomcat。1、SpringBoot在启动时会先创建一个Spring容器。原创 2024-03-26 08:29:03 · 357 阅读 · 0 评论 -
SpringBoot常见注解及实现
2、@Bean注解:用来定义Bean,类似于XML中的标签,Spring在启动时,会对加了@Bean 注解的方法进行解析,将方法的名字作为beanName,并通过执行方法得到bean对象。c.@ConponentScan:标识扫描路径,因为默认是没有配置实际扫描路径,所以SpringBoot扫描的路径是启动类所在的当前目录。a. @SpringBootConfiguration:这个逐渐实际就是一个@Configuration,表示启动类也是一个配置类。原创 2024-03-26 08:26:05 · 176 阅读 · 0 评论 -
SpringMVC的底层工作流程
3、处理器映射器找到具体的处理器(可以根据XML配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。10、DispatcherServlet根据view进行渲染视图(即将模型数据填充至视图中)4、DispatcherServlet调用HandlerAdapter处理器适配器。11、DispatcherServlet响应用户。原创 2024-03-26 08:23:08 · 218 阅读 · 0 评论 -
Spring容器启动流程
4、利用BeanDefinition创建Bean就是Bean的创建声明周期,这期间包括了合并BeanDefinition、推断构造方法、实例化、属性填充、初始化前、初始化、初始化后等步骤,其中AOP就是发生在初始化后这一步中。3、然后筛选出非懒加载的单例BeanDefinition进行创建Bean,对于多例Bean不需要在启动过程中去进行创建,对于多例Bean会在每次获取Bean时利用BeanDefinition去创建。2、先会进行扫描,扫描得到所有的BeanDefinition对象,并存在一个Map中。原创 2024-03-26 08:20:46 · 358 阅读 · 0 评论 -
Spring中事务实现步骤
11、Spring事务的传播机制是基于数据库连接做的,一个数据库连接一个事务,如果传播机制配置为需要新开一个事务,那么实际上就是先建立一个数据库的连接,在此新数据库连接上执行SQL。5、并且修改数据库连接的autocommit属性为false,禁止此连接的自动提交策略,这是实现Spring事务非常重要的一步。10、Spring事务的传播机制是Spring事务自己实现的,也是Spring事务中最复杂的。8、如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务。Spring中事务实现步骤。原创 2024-03-25 08:38:40 · 240 阅读 · 0 评论 -
ApplicationContext和BeanFactory区别
BeanFactory 是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean,而ApplicationContext继承了BeanFactory,所以ApplicationContext拥有beanFactory所有的特点,也就一个Bean工厂,但是ApplicationContext除了继承了BeanFactory之外,还继承了诸如EnvironmentCapable、MessageSource、MessageSource、ApplicationEventPublisher等接原创 2024-03-25 08:16:32 · 230 阅读 · 0 评论 -
Spring事务的实现方式原理
事务操作是AOP的一个核心体现,当一个方法添加@Transactional注解之后,Spring会基于这个类生成一个代理对象,会将这个代理对象作为bean,当使用这个代理对象的方法的时候,如果有事务处理,那么会先把事务的自动提交给关闭,然后执行具体的业务逻辑,如果执行逻辑没有出现异常,那么代理逻辑就会直接提交,如果出现任何异常情况,那么直接进行回滚操作,用户可以控制对哪些异常进行回滚操作。Spring事务的实现方式原理。原创 2024-03-23 14:37:20 · 269 阅读 · 0 评论 -
整理Spring框架的优势
2、Spring框架之外还存在一个构建核心框架之上的庞大生态圈,它将Sping扩展到不同的领域,如Web服务、REST、移动开发以及NoSQL。8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选用Spring框架的部分或全部。6、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用。7、Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。3、低侵入式设计,代码的污染极低。原创 2024-03-23 14:33:15 · 303 阅读 · 0 评论 -
Spring事务的传播机制
REQUIRED_NEW是新建一个事务并且新开始的这个事务与原有的事务无关,而NESTED则是当前存在事务时会开启一个嵌套事务,在NESTED情况下,父事务回滚时,子事务也会回滚,而REQUIRED_NEW情况下,原有事务回滚,不会影响新开启的事务。REQUIRED:默认的传播特性,如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务。SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,则以非事务的方式执行。NEVER:不使用事务,如果当前事务存在,则抛出异常。原创 2024-03-23 14:29:22 · 196 阅读 · 0 评论 -
Spring框架中使用的设计模式及应用场景
加载资源文件的方式,使用了不同的方法,比如:ClassPathResource,FileSystemResource,ServletContextResource,UrlResource 但他们都有共同的接口Resource;在AOP的实现中,采用了两种不同的方式,JDK动态代理和CGLIB代理。Spring AOP 利用了Aspectj AOP实现的AspectJ AOP 的底层用了动态代理。在各种BeanFactory以及ApplicationContext实现中也都用到了。比如在创建bean到时候。原创 2024-03-23 14:24:54 · 373 阅读 · 0 评论 -
Spring事务失效场景
1、bean对象没有被Spring容器管理。2、方法的访问修饰符不是public。4、数据源没有配置事务管理器。7、异常类型错误或配置错误。Spring事务何时失效。5、数据库不支持事务。原创 2024-03-23 14:21:33 · 120 阅读 · 0 评论 -
Spring是如何简化开发的
1、基于POJO的轻量级和最小侵入性编程。2、通过依赖注入和面向接口实现松耦合。3、基于切面和惯例进行声明式编程。4、通过切面和模板减少样板式代码。Spring是如何简化开发的。原创 2024-03-23 14:19:34 · 116 阅读 · 0 评论 -
Spring支持的bean作用域
该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。该属性仅用于HTTP Session,同一个Session共享一个Bean实例,不同Session使用不同的实例。使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容易每次返回的是同一个Bean实例。使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。原创 2024-03-23 14:15:50 · 208 阅读 · 0 评论 -
线程池的底层工作原理与队列添加
3、如果此时线程池中的线程数量大于等于corePoolSize,缓冲队列workQueue满了,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。5、当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止,这样线程池就可以动态的调整池中的线程数了。1、如果此时线程池中的线程数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。原创 2024-03-19 17:24:25 · 432 阅读 · 0 评论 -
分布式服务的接口幂等性设计
第二次请求,业务处理,携带之前的token,到Redis进行验证,如果存在,可以执行业务,删除token,如果不存在,则直接返回,不处理业务。幂等:多次调用方法或接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。第一次请求,生成一个唯一token存入Redis,返回给前端。2、使用token+Redis来实现,性能较好。如果是新增数据,可以使用数据库的唯一索引。1、分布式锁,性能较低。原创 2024-03-18 10:23:29 · 435 阅读 · 0 评论 -
分布式事务解决方案
4、MQ模式实现分布式事务,在A服务写数据的时候,需要在同一个事务内发送消息到另外一个事务,异步,性能最好。1、seat的XA模式,CP,需要互相等待各个分支事务提交,可以保证强一致性,性能差。2、seata的AT模式,AP,底层使用undo log实现,性能好。3、seata的TCC模式,AP,性能较好,不过需要人工编码实现(适合银行业务)项目中解决分布式事务一般采用seata或MQ。原创 2024-03-18 10:21:53 · 439 阅读 · 0 评论 -
分布式系统CAP和BASE理论
1、最终一致思想:个分支事务分别执行并提交,如果有不一致的情况,再想办法恢复数据(AP)2、强一致思想:各分支事务执行完业务不要提交,等待彼此结果。而后统一提交或回滚(CP)2、当分区出现时,系统的一致性(C)和可用性(A)就无法同时满足。1、分布式系统节点通过网络连接,一定会出现分区问题(P)CAP定理(一致性、可用性、分区容错性)原创 2024-03-18 10:19:54 · 376 阅读 · 0 评论 -
微服务限流
在spring cloud gateway 中支持局部过滤器RequestRateLimiter 来做限流,使用的是令牌桶算法。控制速率(突发限流),使用的漏桶算法来实现过滤,让请求以固定的速率处理请求,可以应对突发流量。可以根据IP或路径进行限流,可以设置每秒填充平均速率,和令牌桶总容量。控制并发数,现在单个IP的链接数和并发链接的总数。原创 2024-03-18 10:17:27 · 353 阅读 · 0 评论 -
SpringCloud服务雪崩、熔断
2、服务熔断:默认关闭,需要手动打开,如果检测到10秒内请求的失败率超过50%,就触发熔断机制。之后每隔5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,回复正常请求。1、服务降级:服务自我保护的一种方法,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑。一个服务失败,导致整个链路的服务都失败的情形。原创 2024-03-18 10:11:04 · 520 阅读 · 0 评论 -
SpringCloud 负载均衡策略
ZoneAvoidanceRule:区域敏感策略,以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可用理解为一个机房、一个机架等。微服务的负载均衡主要使用了组件Ribbon,比如 使用feign远程调用的过程中,底层的负载均衡就是使用了ribbon。WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小。2、在客户端的配置文件中,可用配置某一个服务调用的负责均衡策略(局部)1、创建类实现IRule接口,可用指定负载均衡策略(全局)原创 2024-03-18 10:08:26 · 761 阅读 · 0 评论