SpringBoot框架知识点总结

目录

1、SpringBoot简介及其优点

2、如何重新加载SpringBoot上的更改,而无需重新启动服务器?

3.SpringBoot中的监视器是什么以及如何监视

4.如何在SpringBoot中禁用Actuator端点安全性?

5.如何在自定义端口上运行SpringBoot应用程序?

6.如何实现SpringBoot应用程序的安全性?

7.使用SpringBoot实现异常处理

8.如何集成SpringBoot和ActiveMQ

9.SpringBoot实现分页和排序

10.Swagger简介以及SpringBoot实现

12.什么是YAML?

13.JavaConfig

14.SpringProfiles

15.SpringBatch

16.FreeMarker模板

17.startermaven使用的依赖项

18.CSRF攻击

19.什么是WebSockets?

20.AOP

21.ApacheKafka


1、SpringBoot简介及其优点

简介:多年来,随着新功能的增加,spring变得越来越复杂。https://spring.io/projects

SpringBoot可以解决启动新的Spring项目过程中1、添加构建路径或添加Maven依赖关系;2配置应用程序服务器;3、添加spring配置。

SpringBoot已经建立在现有spring框架之上。使用spring启动,我们避免了之前我们必须做的所有样板代码和配置。因此,SpringBoot可以帮助我们以最少的工作量,更加健壮地使用现有的Spring功能。

优点:

1、减少开发测试时间

2、使用JavaConfig有助于避免使用XML

3、避免大量的Maven导入和各种版本冲突

4、提供意见发展方法

5、通过提供默认值快速开始开发

6、没有单独的Web服务器需要。这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。

7、需要更少的配置因为没有web.xml文件。只需添加用@Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。

8、基于环境的配置使用这些属性,您可以将您正在使用的环境传递到应用程序:

-Dspring.profiles.active={enviornment}。在加载主应用程序属性文件后,Spring将在(application{environment}.properties)中加载后续的应用程序属性文件。

2、如何重新加载SpringBoot上的更改,而无需重新启动服务器?

可以使用DEV工具来实现。通过这种依赖关系,可以节省任何更改,嵌入式tomcat将重新启动。SpringBoot有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载SpringBoot上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。SpringBoot在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供H2数据库控制台以更好地测试应用程序。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<optional>true</optional>

3.SpringBoot中的监视器是什么以及如何监视

Springboot actuator是spring启动框架中的重要功能之一。Springboot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTPURL访问的REST端点来检查状态。

如何监视所有SpringBoot微服务?

SpringBoot提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及50个应用程序的微服务,管理员将不得不击中所有50个应用程序的执行终端。

为了帮助我们处理这种情况,我们将使用位于的开源项目。它建立在SpringBootActuator之上,它提供了一个WebUI,使我们能够可视化多个应用程序的度量。

4.如何在SpringBoot中禁用Actuator端点安全性?

默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserInRole方法实施的。我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

5.如何在自定义端口上运行SpringBoot应用程序?

为了在自定义端口上运行SpringBoot应用程序,您可以在application.properties中指定端口。

server.port=8090

6.如何实现SpringBoot应用程序的安全性?

使用spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

7.使用SpringBoot实现异常处理

Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。通过实现一个ControlerAdvice类,来处理控制器类抛出的所有异常。

8.如何集成SpringBoot和ActiveMQ

使用依赖关系。只需要很少的配置,并且不需要样板代码。

9.SpringBoot实现分页和排序

使用SpringData-JPA可以实现将可分页的传递给存储库方法。

10.Swagger简介以及SpringBoot实现

Swagger广泛用于可视化API,使用SwaggerUI为前端开发人员提供在线沙箱。Swagger是用于生成RESTfulWeb服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过Swagger正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

12.什么是YAML?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

13.JavaConfig

SpringJavaConfig是Spring社区的产品,它提供了配置SpringIoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:

1、面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。

2、减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。JavaConfig为开发人员提供了一种纯Java方法来配置与XML配置概念相似的Spring容器。从技术角度来讲,只使用JavaConfig配置类来配置容器是可行的,但实际上很多人认为将JavaConfig与XML混合匹配是理想的。

3、类型安全和重构友好。JavaConfig提供了一种类型安全的方法来配置Spring容器。由于Java5.0对泛型的支持,现在可以按类型而不是按名称检索bean,不需要任何强制转换或基于字符串的查找。

14.SpringProfiles

SpringProfiles允许用户根据配置文件(devtestprod等)来注册bean。因此,当应用程序在开发中运行时,只有某些bean可以加载,而在PRODUCTION中,某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。SpringBoot使得使用配置文件非常简单。

15.SpringBatch

SpringBootBatch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

16.FreeMarker模板

FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构进行动态网页生成。使用Freemarker的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理html页面设计。最后使用freemarker可以将这些结合起来,给出最终的输出页面。

17.startermaven使用的依赖项

spring-boot-starter-activemqspring-boot-starter-security这有助于增加更少的依赖关系,并减少版本的冲突。

18.CSRF攻击

CSRF(跨站请求伪造)是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

19.什么是WebSockets?

WebSocket是一种计算机通信协议,通过单个TCP连接提供全双工通信信道。

1、WebSocket是双向的-使用WebSocket客户端或服务器可以发起消息发送。

2、WebSocket是全双工的 -客户端和服务器通信是相互独立的。

3、单个TCP连接 -初始连接使用HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信

4、Light-与http相比,WebSocket消息数据交换要轻得多。

20.AOP

在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。

21.ApacheKafka

ApacheKafka是一个分布式发布-订阅消息系统。它是一个可扩展的,容错的发布-订阅消息系统,它使我们能够构建分布式应用程序。这是一个Apache顶级项目。Kafka适合离线和在线消息消费。

22.springboot的事务

事务(transaction)是指业务逻辑上对数据库进行的一系列持久化操作,要么全部成功,要么全部失败。事务的四个基本性质(ACID)

    1)原子性(Atomicity):指事务是一个不可分割的工作单位,这组操作要么全部执行,要么全部不发生。就拿银行转账来说,原子性指的是从A账户扣款和转账到B账户两件事一起发生,不能只发生其中一样。

    2)一致性(Consistency):在事务开始的前后,被操作的数据的完整性都处于一致性的状态。一致性指的是在转账的前后A和B两个账户的总金额是不变的,始终保持一致。

    3)隔离性(Isolation):多个事务并发时,事务之间是隔离的,每个事务都有自己的完整数据空间,不会影响到其他事物的运行效果。还有事务隔离性的四种隔离级别和实现原理。

    4)持久性(Durability):事务提交后,该事务对数据所做的修改将持久地保存在数据库,并不会回滚。

    事务的原子性、一致性和持久性是通过数据库的redo/undo日志文件实现的。redo log处理系统故障,undo log处理事务回滚。如果在事务提交之后出现数据库崩溃(断电)的情况,在恢复供电时,数据库会根据重写日志对数据进行前滚。

    2、事务的实现

在Spring中,事务有两种实现方式:

编程式事务:编程式事务管理使用Transaction Template或者直接使用底层的Platform TransactionManager。对于编程式事务,Spring推荐使用Transaction Template。TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

声明式事务:声明式事务基于AOP,其本质是对方法前后进行拦截,在方法开始前创建或加入一个事务,再根据目标方法执行的结果决定提交还是回滚事务。只需要在类、方法加上@Transactional注解就可以使用事务,没有入侵性,简单粗暴。

下面主要介绍一下声明式事务:

1.使用技巧

1、@Transactional可以作用于接口、接口方法、类、类方法上,当作用到类时,该类下所有public方法都将具有该类型的事务属性,同时,也可以在方法级别使用该注解来覆盖类级别的定义。Spring的建议是在具体的实现类和类方法使用@Transactional注解,而不是使用在接口上。因为注解不能继承,不能被基于接口的代理类所识别,注解失效。

2、声明式事务管理默认只对非检查型异常unchecked Exception进行回滚,也就是对RuntimeException异常以及它的子类进行回滚操作。

如果需要让checked Exception也进行回滚,需加上@Transactional(rollbackFor=Exception.class)、

如果需要让unchecked Exception不进行回滚,需加上@Transactional(notRollbackFor=Exception.class)

3、在Springboot使用声明式事务需要在Application启动类加入@EnableTransactionManagement注解,相当于Spring的自动扫描

2.常用配置

参 数 名 称 默认值   功 能 描 述用法举例("~"表示参数名,"RE"表示RuntimeException)
readOnlyfalse设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写。@Transactional(~=true)
rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。指定单一异常类:@Transactional(~=.class)指定多个异常类:@Transactional(~={RE.class, Exception.class})
rollbackForClassName该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。指定单一异常类名称@Transactional(~=”RE”)指定多个异常类名称:@Transactional(~={“RE”,”Exception”})
noRollbackFor该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。

指定单一异常类:@Transactional(~=RE.class)

指定多个异常类:@Transactional(~={RE.class, Exception.class})

noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。指定单一异常类名称:@Transactional(~=”RE”)指定多个异常类名称:@Transactional(~={“RE”,”Exception”})
propagation设置事务的传播行为。@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
isolation设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
timeout -1表示永不超时该属性用于设置事务的超时秒数

3.隔离级别

隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:

TransactionDefinition.ISOLATION_DEFAULT这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
TransactionDefinition.ISOLATION_READ_UNCOMMITTED该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
TransactionDefinition.ISOLATION_READ_COMMITTED该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
TransactionDefinition.ISOLATION_REPEATABLE_READ该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。该级别可以防止脏读和不可重复读。
TransactionDefinition.ISOLATION_SERIALIZABLE可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

4.传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:

TransactionDefinition.PROPAGATION_REQUIRED如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
TransactionDefinition.PROPAGATION_REQUIRES_NEW创建一个新的事务,如果当前存在事务,则把当前事务挂起
TransactionDefinition.PROPAGATION_SUPPORTS如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED以非事务方式运行,如果当前存在事务,则把当前事务挂起
TransactionDefinition.PROPAGATION_NEVER以非事务方式运行,如果当前存在事务,则抛出异常
TransactionDefinition.PROPAGATION_MANDATORY如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆〇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值