tx

package
v6.5.8+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 9, 2021 License: Apache-2.0 Imports: 1 Imported by: 27

README

事务处理包

引用onlyasd 的描述

Spring的做法就是把事务和方法调用路径存在栈里放入线程变量。 拿Web项目举例,假设一个请求进来开启一个线程,然后某个方法里请求开启事务时,Spring开启一个事务和当前方法全路径名压入栈放进线程变量,当第二个方法请求开启事务时,Sping先从线程变量中获取事务,判断是否已经有开启的事务以及当前方法的事务类型,如果也是使用默认事务类型,就直接把线程变量中的事务交给当前方法使用,并且把第二个方法全路径名也压入栈,如果还有第三个第四个方法同上。当最最后数据库操作执行结束开始返回之后,非开启事务的第一个方法调用Commit或者RollBack都是无效的,每返回到上一层从栈中移除一个方法,栈中元素大于1,Commit或者RollBack被调用都直接无视,直到最后返回到开启事务的方法调用Commit或者RollBack事务完成。 这样的话,当如上描述中第二第三第四任意方法被独立调用,都不用操心,第二第三第四任意方法里都可以放心的Commit或者RollBack。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ToString

func ToString(propagation Propagation) string

Types

type Propagation

type Propagation int

事务传播行为

const (
	PROPAGATION_REQUIRED      Propagation = iota //默认,表示如果当前事务存在,则支持当前事务。否则,会启动一个新的事务。have tx ? join : new tx()
	PROPAGATION_SUPPORTS                         //表示如果当前事务存在,则支持当前事务,如果当前没有事务,就以非事务方式执行。  have tx ? join(): session.exec()
	PROPAGATION_MANDATORY                        //表示如果当前事务存在,则支持当前事务,如果当前没有事务,则返回事务嵌套错误。  have tx ? join() : return error
	PROPAGATION_REQUIRES_NEW                     //表示新建一个全新Session开启一个全新事务,如果当前存在事务,则把当前事务挂起。 have tx ? stop old。  -> new session().new tx()
	PROPAGATION_NOT_SUPPORTED                    //表示以非事务方式执行操作,如果当前存在事务,则新建一个Session以非事务方式执行操作,把当前事务挂起。  have tx ? stop old。 -> new session().exec()
	PROPAGATION_NEVER                            //表示以非事务方式执行操作,如果当前存在事务,则返回事务嵌套错误。    have tx ? return error: session.exec()
	PROPAGATION_NESTED                           //表示如果当前事务存在,则在嵌套事务内执行,如嵌套事务回滚,则只会在嵌套事务内回滚,不会影响当前事务。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
	PROPAGATION_NOT_REQUIRED                     //表示如果当前没有事务,就新建一个事务,否则返回错误。  have tx ? return error: session.new tx()
)

func NewPropagation

func NewPropagation(arg string) Propagation

type SavePointStack

type SavePointStack struct {
	// contains filtered or unexported fields
}

session map是协程安全的 session对应SavePointStack是1:1关系,此处无需处理并发,因为都是单协程访问

func (*SavePointStack) Len

func (s *SavePointStack) Len() int

func (SavePointStack) New

func (it SavePointStack) New() SavePointStack

func (*SavePointStack) Pop

func (s *SavePointStack) Pop() *string

func (*SavePointStack) Push

func (s *SavePointStack) Push(k string)

type TxStack

type TxStack struct {
	// contains filtered or unexported fields
}

session map是协程安全的 session对应TxStack是1:1关系,此处无需处理并发,因为都是单协程访问

func (*TxStack) First

func (s *TxStack) First() (*sql.Tx, *Propagation)

func (*TxStack) HaveTx

func (s *TxStack) HaveTx() bool

func (*TxStack) Last

func (s *TxStack) Last() (*sql.Tx, *Propagation)

func (*TxStack) Len

func (s *TxStack) Len() int

func (TxStack) New

func (it TxStack) New() TxStack

func (*TxStack) Pop

func (s *TxStack) Pop() (*sql.Tx, *Propagation)

func (*TxStack) Push

func (s *TxStack) Push(k *sql.Tx, p *Propagation)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL