配置檔案的方式,即在spring xml檔案中進行統一配置,開發者基本上就不用關注事務的事情了,**中無需關心任何和事務相關的**,一切交給spring處理。
註解的方式,只需在需要spring來幫忙管理事務的方法上加上@transaction註解就可以了,註解的方式相對來說更簡潔一些,都需要開發者自己去進行配置。
1、啟用spring的注釋驅動事務管理功能
在spring配置類上加上@enabletransactionmanagement
註解
@enabletransactionmanagement
public class mainconfig4
當spring容器啟動的時候,發現有@enabletransactionmanagement註解,此時會攔截所有bean的建立,掃瞄看一下bean上是否有@transaction註解(類、或者父類、或者介面、或者方法中有這個註解都可以),如果有這個註解,spring會通過aop的方式給bean生成**物件,**物件中會增加乙個***,***會攔截bean中public方法執行,會在方法執行之前啟動事務,方法執行完畢之後提交或者回滾事務。
enabletransactionmanagement 的原始碼
@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@import(transactionmanagementconfigurationselector.class)
public @inte***ce enabletransactionmanagement
2、定義事務管理器
@bean
public platformtransactionmanager transactionmanager(datasource datasource)
3、需使用事務的目標上加@transaction註解
@transactional原始碼:
@target()
@retention(retentionpolicy.runtime)
@inherited
@documented
public @inte***ce transactional ;
/*** 和 rollbackfor 作用一樣,只是這個地方使用的是類名
*/string rollbackforclassname() default {};
/*** 定義零(0)個或更多異常類,這些異常類必須是throwable的子類,當方法丟擲這些異常的時候,事務不會回滾
*/class<? extends throwable> norollbackfor() default {};
/*** 和 norollbackfor 作用一樣,只是這個地方使用的是類名
*/string norollbackforclassname() default {};
}
步驟1:定義事務管理器platformtransactionmanager
步驟2:定義事務屬性transactiondefinition
定義事務屬性,比如事務隔離級別、事務超時時間、事務傳播方式、是否是唯讀事務等等。
spring中使用transactiondefinition介面來表示事務的定義資訊,有個子模擬較常用:defaulttransactiondefinition。
步驟3,4,5開啟事務,執行業務,回滾或者提交事務
@test
public void test1() throws exception catch (exception e)
system.out.println("after:" + jdbctemplate.queryforlist("select * from t_user"));
}
通過transactiontemplate控制事務
配置類,將事務管理器platformtransactionmanager
、事務模板transactiontemplate
都註冊到spring中
@configuration
@componentscan
public class mainconfig3
@bean
public jdbctemplate jdbctemplate(datasource datasource)
@bean
public platformtransactionmanager transactionmanager(datasource datasource)
@bean
public transactiontemplate transactiontemplate(platformtransactionmanager transactionmanager)
}
實際業務呼叫:
@component
public class userservice );
}//模擬業務操作2
public void bus2() );
}//查詢表中所有資料
public list userlist()
}
@configuration
public class transactionadviceconfig
@bean
public advisor txadviceadvisor()
}
springboot事務使用
1 事務傳播 propagation 例如 propagation.requered 屬性 required supports mandatory requires new not supported never nested 屬性 required 使用當前的事務,如果沒有事務,則自己新建乙個事務...
spring boot之事務使用
spring boot的事務使用非常簡單,分為以下兩步 在入口類上新增註解 enabletransactionmanagement即可開啟事務 package com.bsqs.shop.order import org.springframework.cloud.client.discovery....
batis plus事務使用
service實現類 service transactional propagation propagation.nested,isolation isolation.default,readonly false,rollbackfor restexception.class 加在類上面,下面方法預...