SpringBoot框架知识点总结
⽬录
1、SpringBoot简介及其优点
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、需要更少的配置:因为没有l⽂件。只需添加⽤@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数据库控制台以更好地测试应⽤程序。
1<dependency>
2
3<groupId>org.springframework.boot</groupId>
4
5<artifactId>spring-boot-devtools</artifactId>
6
7<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允许⽤户根据配置⽂件(dev、test、prod等)来注册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注解就可以使⽤事务,没有⼊侵性,简单粗暴。
springboot框架的作用下⾯主要介绍⼀下声明式事务:
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)
readOnly false 设置当前事务是否为只读事
务,设置为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。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论