update pictures
This commit is contained in:
@ -125,7 +125,7 @@ health 端点用于暴露程序运行的健康状态,暴露的信息的详细
|
||||
- **CustomHealthAggregator**:自定义健康状态聚合规则;
|
||||
- **CustomEndPoint**:自定义端点。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-actuator.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-actuator.png"/> </div>
|
||||
|
||||
### 2.2 主要依赖
|
||||
|
||||
@ -160,7 +160,7 @@ management:
|
||||
|
||||
导入 Actuator 的 starter 并进行配置后,访问 http://127.0.0.1:8080/actuator/health 就可以看到对应的项目监控状态。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/health.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/health.png"/> </div>
|
||||
|
||||
健康指标 HealthIndicators 由 Spring Boot 自动配置,因此这里显示监控信息是由项目所使用的技术栈而决定的:
|
||||
|
||||
@ -207,11 +207,11 @@ public class CustomHealthIndicator implements HealthIndicator {
|
||||
|
||||
自定义检查通过的情况下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/actuator-health-up.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/actuator-health-up.png"/> </div>
|
||||
|
||||
自定义检查失败的情况:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/health-fatal-200.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/health-fatal-200.png"/> </div>
|
||||
|
||||
自定义检查不论是否通过都不会影响整体的 status,因此两种情况下的 status 值都是 `up`。如果想通过自定义检查去影响整体的检查结果,比如健康检查针对的是支付业务,在支付业务的不可用的情况下,我们就应该认为整个服务是不可用的,这个时候就需要通过自定义健康状态的聚合规则来实现。
|
||||
|
||||
@ -241,7 +241,7 @@ public class CustomHealthAggregator implements HealthAggregator {
|
||||
|
||||
当我们自定义健康检查项不通过时候的结果如下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/actuator-heath-503.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/actuator-heath-503.png"/> </div>
|
||||
|
||||
这里需要注意的是返回自定义的聚合状态时,状态码也变成了 503,这是我们在配置文件中进行定义的:
|
||||
|
||||
@ -319,8 +319,8 @@ public class CustomEndPoint {
|
||||
|
||||
地址为:http://127.0.0.1:8080/actuator/customEndPoint :
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/actuator-customEndPoint.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/actuator-customEndPoint.png"/> </div>
|
||||
|
||||
关于 Sigar 的更多监控参数可以参考博客:[java 读取计算机 CPU、内存等信息(Sigar 使用)](https://blog.csdn.net/wudiazu/article/details/73829324) 或 Sigar 下载包中的用例:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/sigar.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/sigar.png"/> </div>
|
||||
|
@ -21,7 +21,7 @@
|
||||
2. 模板引擎采用 freemaker 和 thymeleaf 作为示例,分别对应模板文件 makershow.ftl 和 leafShow.html;
|
||||
3. Spring Boot 2.x 默认不支持 Jsp ,需要额外的配置,关于使用 jsp 的整合可以参考 [spring-boot-jsp](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-jsp) 项目。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-base.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-base.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
|
||||
+ Spring Boot 项目默认继承自 spring-boot-starter-parent,而 spring-boot-starter-parent 则继承自 spring-boot-dependencies,spring-boot-dependencies 中定义了关于 spring boot 依赖的各种 jar 包的版本,它是 Spring Boot 的版本管理中心。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-dependencies.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-dependencies.png"/> </div>
|
||||
|
||||
+ 关于Spring Boot 2.x 官方支持的所有 starter 可以参见官方文档:[Table 13.1. Spring Boot application starters](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#using-boot-starter)
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
### 1.1 项目结构
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-data-jpa.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-data-jpa.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
2. 为了演示 Druid 控制台的功能,项目以 Web 的方式构建。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-druid-mybatis.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-druid-mybatis.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
@ -199,10 +199,10 @@ public class DruidStatController {
|
||||
}
|
||||
```
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/druid-status.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/druid-status.png"/> </div>
|
||||
|
||||
### 2.4 Druid 控制台
|
||||
|
||||
默认访问地址为 http://localhost:8080/druid/login.html :
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-druid%20%E6%8E%A7%E5%88%B6%E5%8F%B0.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-druid%20%E6%8E%A7%E5%88%B6%E5%8F%B0.png"/> </div>
|
||||
|
@ -23,7 +23,7 @@
|
||||
- **boot-dubbo-provider** :服务的提供者,提供商品的查询服务;
|
||||
- **boot-dubbo-consumer** :是服务的消费者,调用 provider 提供的查询服务。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-dubbo.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-dubbo.png"/> </div>
|
||||
|
||||
## 二、基本依赖
|
||||
|
||||
@ -101,11 +101,11 @@
|
||||
- api 下为公共的调用接口;
|
||||
- bean 下为公共的实体类。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/boot-dubbo-common.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/boot-dubbo-common.png"/> </div>
|
||||
|
||||
## 四、服务提供者
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/boot-dubbo-provider.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/boot-dubbo-provider.png"/> </div>
|
||||
|
||||
### 4.1 提供者配置
|
||||
|
||||
@ -160,7 +160,7 @@ public class ProductService implements IProductService {
|
||||
|
||||
## 五、服务消费者
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/boot-dubbo-consumer1.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/boot-dubbo-consumer1.png"/> </div>
|
||||
|
||||
### 5.1 消费者配置
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
</nav>
|
||||
|
||||
## 一、项目说明
|
||||
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-jsp.png"/> </div>
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-kafka.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-kafka.png"/> </div>
|
||||
|
||||
### 1.2 主要依赖
|
||||
|
||||
|
@ -26,7 +26,7 @@ Spring 官方并没有提供关于 Memcached 的 starter,所以我们还是采
|
||||
|
||||
Memcached 的整合配置位于 config 文件夹下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-memcached.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-memcached.png"/> </div>
|
||||
|
||||
### 1.3 基本依赖
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
- 提供基于 MongoTemplate 的方式操作 MongoDB,见测试用例 MongoOriginalTests;
|
||||
- 提供基于 Spring Data JPA 的方式操作 MongoDB (推荐),见测试用例 MongoJPATests。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-mongodb.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-mongodb.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
**注解写法**:对应的类为 Programmer.java ,用 MybatisAnnotationTest 进行测试。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-mybatis.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-mybatis.png"/> </div>
|
||||
|
||||
### 1.2 主要依赖
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
- **rabbitmq-producer** :消息的生产者模块;
|
||||
- **rabbitmq-consumer** :是消息的消费者模块。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-rabbitmq.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-rabbitmq.png"/> </div>
|
||||
|
||||
## 二、主要依赖
|
||||
|
||||
@ -91,7 +91,7 @@
|
||||
- bean 下为公共的实体类。
|
||||
- constant 下为公共配置,用静态常量进行引用。这里我使用静态常量是为了方便引用,实际中也可以按照情况,抽取为公共的配置文件。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/rabbitmq-common.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/rabbitmq-common.png"/> </div>
|
||||
```java
|
||||
public class RabbitInfo {
|
||||
|
||||
@ -113,7 +113,7 @@ public class RabbitInfo {
|
||||
|
||||
## 四、消息消费者
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/rabbitmq-consumer.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/rabbitmq-consumer.png"/> </div>
|
||||
### 4.1 消费者配置
|
||||
|
||||
```yaml
|
||||
@ -186,7 +186,7 @@ public class RabbitmqConsumer {
|
||||
|
||||
## 五、消息生产者
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/rabbitmq-producer.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/rabbitmq-producer.png"/> </div>
|
||||
|
||||
### 5.1 生产者配置
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
- RedisConfig.java 实现了 redisTemplate 序列化与反序列化的配置;
|
||||
- RedisOperation 和 RedisObjectOperation 分别封装了对基本类型和对象的操作。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-redis.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-redis.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
- Servlet、过滤器、监听器分别位于 servlet、filter、listen 下,其中以 Annotation 命名结尾的代表是 Servlet 是以注解方式实现,采用 Spring 注册方式则需要在 ServletConfig 中进行注册;
|
||||
- 为了说明外置容器对 Servlet 注解的自动发现机制,项目采用外置容器构建,关于 Spring Boot 整合外置容器的详细说明可以参考:[spring-boot-tomcat](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-tomcat) 。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-servlet.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-servlet.png"/> </div>
|
||||
|
||||
### 1.2 项目依赖
|
||||
|
||||
|
@ -33,7 +33,7 @@ Swagger 是一个规范框架,用于生成、描述、调用和可视化 RESTf
|
||||
|
||||
下图为 swagger-ui 提供的文档可视化界面示例:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/Swagger_UI.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/Swagger_UI.png"/> </div>
|
||||
|
||||
|
||||
### 1.3 关联关系
|
||||
@ -243,16 +243,16 @@ Swagger 为了最大程度防止对逻辑代码的侵入,基本都是依靠注
|
||||
|
||||
接口文档访问地址:http://localhost:8080/swagger-ui.html ,文档主界面如下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/swagger-ui-index.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/swagger-ui-index.png"/> </div>
|
||||
|
||||
### 2.5 接口测试
|
||||
|
||||
Swagger-UI 除了提供接口可视化的功能外,还可以用于接口测试。点击对应接口的 `try it out` 按钮,然后输入对应的参数的值,最后点击下方的 `Execute` 按钮发送请求:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/swagger-try-it.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/swagger-try-it.png"/> </div>
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/swagger-execute.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/swagger-execute.png"/> </div>
|
||||
|
||||
POST 接口可以直接修改 Model 对应的 Json 数据 ,然后点击下方的 `Execute` 按钮发送请求:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/swagger-post-try.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/swagger-post-try.png"/> </div>
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
Spring Boot 默认采用内置的 Web 容器,因此打成 JAR 包后就可以直接运行。但在某的时候,你可能还是需要使用 Tomcat 来运行和管理 Web 项目,因此本用例主要介绍 Spring Boot 与 Tomcat 的整合方式。另外 Spring Boot 内置的 Web 容器默认并不支持 JSP,所以可以使用跳转到 JSP 页面的方式来测试整合外部容器是否成功。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-tomcat.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-tomcat.png"/> </div>
|
||||
|
||||
### 1.2 基本依赖
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
- 关于 WebSocket 的主要配置在 websocket 文件夹下;
|
||||
- 模板引擎采用 freemaker;
|
||||
- 项目以 Web 的方式构建。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-websocket.png"/> </div>
|
||||
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
## 一、项目结构
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/spring-boot-yml-profile.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/spring-boot-yml-profile.png"/> </div>
|
||||
|
||||
## 二、YAML 语法
|
||||
|
||||
@ -149,7 +149,7 @@ Spring Boot 在将环境属性绑定到 `@ConfigurationProperties` beans 时会
|
||||
|
||||
可以在同一个 yml 文件中包含多个配置文件,并使用 `---` 进行分割。或者遵循 application-xxx.yml 命名方式来为不同的环境(如开发环境,生产环境,测试环境)分别生成不同的配置文件,然后再在主配置文件 application.yml 中来决定使用哪个具体的配置,或在启动时候通过命令行参数来决定,命令行的优先级大于配置文件的优先级。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/profile.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/profile.png"/> </div>
|
||||
|
||||
```yaml
|
||||
# 配置文件中激活开发环境配置
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
主要配置如下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/springboot-druid-mybatis-multi.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/springboot-druid-mybatis-multi.png"/> </div>
|
||||
|
||||
|
||||
|
||||
@ -474,7 +474,7 @@ public class XATransactionManagerConfig {
|
||||
|
||||
这里我一共给了三种情况的测试接口,如下:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/springboot-druid-mybatis-multi-test.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/springboot-druid-mybatis-multi-test.png"/> </div>
|
||||
|
||||
### 3.1 测试数据库整合结果
|
||||
|
||||
@ -482,15 +482,15 @@ public class XATransactionManagerConfig {
|
||||
|
||||
mysql 数据库:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/mysql01.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/mysql01.png"/> </div>
|
||||
|
||||
mysql02 数据库:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/mysql02.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/mysql02.png"/> </div>
|
||||
|
||||
**前端查询结果**:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/mysql0102.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/mysql0102.png"/> </div>
|
||||
|
||||
### 3.2 测试单数据库事务
|
||||
|
||||
@ -571,19 +571,19 @@ public class XATransactionController {
|
||||
|
||||
数据源 1:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/druid-mysql01.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/druid-mysql01.png"/> </div>
|
||||
|
||||
|
||||
数据源 2:
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/durud-mysql02.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/durud-mysql02.png"/> </div>
|
||||
|
||||
|
||||
url 监控情况:
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/durid-mysql-weburl.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/durid-mysql-weburl.png"/> </div>
|
||||
|
||||
|
||||
|
||||
@ -599,7 +599,7 @@ XA 是由 X/Open 组织提出的分布式事务的规范。XA 规范主要定义
|
||||
|
||||
**而 JTA 就是 XA 规范在 java 语言上的实现。JTA 采用两阶段提交实现分布式事务。**
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/XA.gif"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/XA.gif"/> </div>
|
||||
|
||||
### 4.2 两阶段提交
|
||||
|
||||
@ -614,7 +614,7 @@ XA 是由 X/Open 组织提出的分布式事务的规范。XA 规范主要定义
|
||||
|
||||
在一个分布式事务中,必须有一个场地的 Server 作为协调者 (coordinator),它能向 其它场地的 Server 发出请求,并对它们的回答作出响应,由它来控制一个分布式事务的提交或撤消。该分布式事务中涉及到的其它场地的 Server 称为参与者 (Participant)。
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/commit.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/commit.png"/> </div>
|
||||
|
||||
事务两阶段提交的过程如下:
|
||||
|
||||
@ -655,7 +655,7 @@ XA 是由 X/Open 组织提出的分布式事务的规范。XA 规范主要定义
|
||||
> sqlSessionTemplate 与 Spring 事务管理一起使用,以确保使用的实际 SqlSession 是与当前 Spring 事务关联的,此外它还管理会话生命周期,包括根据 Spring 事务配置根据需要关闭,提交或回滚会话。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/sqlSessionTemplate.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/sqlSessionTemplate.png"/> </div>
|
||||
|
||||
|
||||
这里最主要的是说明 SqlSession 是与当前是 Spring 事务是关联的。
|
||||
@ -737,31 +737,31 @@ public static Connection doGetConnection(DataSource dataSource) throws SQLExcept
|
||||
这里主要的问题是 `TransactionSynchronizationManager.getResource(dataSource)` 中 dataSource 参数是在哪里进行注入的,这里可以沿着调用堆栈往上寻找,可以看到是在这个参数是 `SpringManagedTransaction` 类中获取连接的时候传入的。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/opneConnection.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/opneConnection.png"/> </div>
|
||||
|
||||
|
||||
而 `SpringManagedTransaction` 这类中的 dataSource 是如何得到赋值的,这里可以进入这个类中查看,只有在创建这个类的时候通过构造器为 dataSource 赋值,那么是哪个方法创建了 `SpringManagedTransaction`?
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/springManagerTransaction.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/springManagerTransaction.png"/> </div>
|
||||
|
||||
|
||||
在构造器上打一个断点,沿着调用的堆栈往上寻找可以看到是 `DefaultSqlSessionFactory` 在创建 `SpringManagedTransaction` 中传入的,**这个数据源就是创建 sqlSession 的 `sqlSessionFactory` 中数据源**。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/DefaultSqlSessionFactory.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/DefaultSqlSessionFactory.png"/> </div>
|
||||
|
||||
|
||||
**这里说明连接的复用是与我们创建 SqlSession 时候传入的 SqlSessionFactory 是否是同一个有关**。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/getsqlSession.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/getsqlSession.png"/> </div>
|
||||
|
||||
|
||||
所以我们才重写了 SqlSessionTemplate 中的 `getSqlSession` 方法,获取 SqlSession 时候传入正在使用的数据源对应的 `SqlSessionFactory`,这样即便在同一个的事务中,由于传入的 `SqlSessionFactory` 中不同,就不会出现连接复用。
|
||||
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/customSqlSessionTemplate.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/customSqlSessionTemplate.png"/> </div>
|
||||
|
||||
|
||||
关于 Mybati-Spring 的更多事务处理机制,推荐阅读博客:[mybatis-spring 事务处理机制分析](https://my.oschina.net/fifadxj/blog/785621)
|
||||
@ -800,7 +800,7 @@ private SqlSessionFactory createSqlSessionFactory(DataSource dataSource) throws
|
||||
|
||||
正常绑定的情况下,我们是可以在 SqlSessionFactory 中查看到绑定好的查询接口:
|
||||
|
||||
<div align="center"> <img src="https://github.com/heibaiying/spring-samples-for-all/blob/master/pictures/sqlSessionFactory.png"/> </div>
|
||||
<div align="center"> <img src="https://gitee.com/heibaiying/spring-samples-for-all/raw/master/pictures/sqlSessionFactory.png"/> </div>
|
||||
<br>
|
||||
|
||||
## 参考资料
|
||||
|
Reference in New Issue
Block a user