10.4学习

时间:2024-10-05 12:44:37

1.@Transactional

注意事项:

①事务函数中不要处理耗时任务,会导致长期占有数据库连接。

②事务函数中不要处理无关业务,防止产生异常导致事务回滚。

●事务传播属性

①REQUIRED(默认属性) 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

②MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。

③NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

④NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

⑤REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

⑥SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

⑦NESTED (局部回滚) 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

 

2.spring中的设计模式

●单例设计模式 : Spring 中的 Bean 默认都是单例的。

●⼯⼚设计模式 : Spring使⽤⼯⼚模式通过 BeanFactory 、 ApplicationContext 创建bean 对象。

●代理设计模式 : Spring AOP 功能的实现。

●观察者模式: Spring 事件驱动模型就是观察者模式很经典的⼀个应⽤。

●适配器模式:Spring AOP 的增强或通知(Advice)使⽤到了适配器模式、spring MVC 中也是⽤到了适配器模式适配 Controller 。

 

3.SpringCloud

Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

80b974ad156a41e7b6530d432709ddb7.jpg

 

 

SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务,SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发

 

​ MartinFlower 提出的微服务之间是通过RestFulApi进行通信,具体实现

 

●RestTemplate:基于HTTP协议

●Feign:封装了ribbon和Hystrix 、RestTemplate 简化了客户端开发工作量

●RPC:基于TCP协议,序列化和传输效率提升明显

●MQ:异步解耦微服务之间的调用

 

4.Spring Boot

●Spring Boot 通过简单的步骤就可以创建一个 Spring 应用。

●Spring Boot 为 Spring 整合第三方框架提供了开箱即用功能。

●Spring Boot 的核心思想是约定大于配置。

 

●Spring Boot 解决的问题

①搭建后端框架时需要手动添加 Maven 配置,涉及很多 XML 配置文件,增加了搭建难度和时间成本。

②将项目编译成 war 包,部署到 Tomcat 中,项目部署依赖 Tomcat,这样非常不方便。

③应用监控做的比较简单,通常都是通过一个没有任何逻辑的接口来判断应用的存活状态。

 

●Spring Boot 优点

 

①自动装配:Spring Boot 会根据某些规则对所有配置的 Bean 进行初始化。可以减少了很多重复性的工作。

比如使用 MongoDB 时,只需加入 MongoDB 的 Starter 包,然后配置 的连接信息,就可以直接使用 MongoTemplate 自动装配来操作数据库了。简化了 Maven Jar 包的依赖,降低了烦琐配置的出错几率。

②内嵌容器:Spring Boot 应用程序可以不用部署到外部容器中,比如 Tomcat。

应用程序可以直接通过 Maven 命令编译成可执行的 jar 包,通过 java-jar 命令启动即可,非常方便。

③应用监控:Spring Boot 中自带监控功能 Actuator,可以实现对程序内部运行情况进行监控,

比如 Bean 加载情况、环境变量、日志信息、线程信息等。当然也可以自定义跟业务相关的监控,通过Actuator 的端点信息进行暴露。

 

●自定义一个Starter

①创建 Starter 项目,定义 Starter 需要的配置(Properties)类,比如数据库的连接信息;

②编写自动配置类,自动配置类就是获取配置,根据配置来自动装配 Bean;

③编写 spring.factories 文件加载自动配置类,Spring 启动的时候会扫描 spring.factories 文件;

④编写配置提示文件 spring-configuration-metadata.json(不是必须的),在添加配置的时候,我们想要知道具体的配置项是什么作用,可以通过编写提示文件来提示;

⑤在项目中引入自定义 Starter 的 Maven 依赖,增加配置值后即可使用。