Hmily 源码解析 (三) —— himly事务上下文

Hmily 源码解析 (三) —— himly事务上下文目录 1 HmilyTransac himly 事务上下文 在一个线程内只有唯一实例 在线程内时不时的需要获取事务的 id 及角色状态等信息 如果作为参数在函数中传递并不合适 并且由于切面 拦截器等等编程方式也无法依靠该方式获取所需要的信息 hmily 采用的方式是将所需要的信息封装为一个实体 这个实体就是 HmilyTransac

目录

----

1. HmilyTransactionContext

himly事务上下文,在一个线程内只有唯一实例。

在线程内时不时的需要获取事务的id及角色状态等信息。如果作为参数在函数中传递并不合适,并且由于切面,拦截器等等编程方式也无法依靠该方式获取所需要的信息。hmily采用的方式是将所需要的信息封装为一个实体,这个实体就是HmilyTransactionContext。并将HmilyTransactionContext存储在ThreadLocal<>中,保证每个线程隔离唯一。

HmilyTransactionContext中的属性是HmilyTransaction属性的冗余,按理说直接使用HmilyTransaction类就可以,但是单独把部分属性冗余出来一个HmilyTransactionContext类的原因是为什么?我认为原因有二:一、这里的作用是作为线程内的上下文,单独建一个类有利于清晰代码结构。二、HmilyTransactionContext内的属性(action,role)还是业务流转中的判断状态,并且还会根据需要被修改某种中间状态(然后又修改回来),可以说HmilyTransactionContext的属性虽然是HmilyTransaction的子集,但是(action,role)属性在HmilyTransactionContext下的实际值域却大于在HmilyTransaction中的实际值域,说起来很绕口,总结起来就是一句话HmilyTransactionContext要承担的某些作用同HmilyTransaction类的定位无关,所以单独建立一个HmilyTransactionContext类。

属性说明

transId

事务id。同HmilyTransaction的transId,作用是绑定为线程唯一,一个线程内至多只会有一个himly事务。

action

流转状态。值域为HmilyActionEnum枚举类型。 同HmilyTransaction的status属性的值域相同。

role

角色。值域为HmilyRoleEnum枚举类型。角色的作用比较复杂,简单来说,在通过切面时,会根据角色的不同选择执行不同的代码,起到分流的作用。并在适当的时候修改角色值,以保证下次进入切面时执行相应的代码。

2. HmilyTransactionContextLocal

事务上下文管理类。采用单例的设计模式,全局唯一。实例内部维护一个ThreadLocal实例属性。在线程间隔离,保证每一个线程内部至多只有一个HmilyTransactionContext(事务上下文)实例。

ThreadLocal(线程本地变量),是java.lang包提供的一个类。这是HmilyTransactionContextLocal类的核心。具体作用是该实例内部可以维护我们定义的一个泛型实例(这里就是HmilyTransactionContext类),并且为每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量而不会出现共享的问题。更具体的就不详述了。

属性

CURRENT_LOCAL

线程本地变量,用于为每一个线程都存储一个独立的HmilyTransactionContext实例副本,存储在CURRENT_LOCAL中保证每一个线程至多只有一个事务上下文。

TRANSACTION_CONTEXT_LOCAL

唯一的HmilyTransactionContextLocal实例。由于HmilyTransactionContextLocal是全局单例所以能保证CURRENT_LOCAL全局唯一,从而保证每一个线程至多只有一个事务上下文。

方法

构造方法HmilyTransactionContextLocal

通过构造方法私有化保证单例模式。

getInstance

提供给外界获取HmilyTransactionContextLocal实例。

set

为线程添加事务上下文

get

获取该线程的的事务上下文。(这里的操作并不会删除CURRENT_LOCAL内的数据)

remove

清除线程内的事务上下文。

编程小号
上一篇 2025-04-12 22:17
下一篇 2025-01-26 14:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/135942.html