spring快速複習2事務及一些使用到的設計模式
阿新 • • 發佈:2020-12-17
事務管理器
Mybatis(JdbcTeamplate))的事務管理器: DataSourceTransactionManager
Hibernate事務管理器:HibernateTransactionManager
事務的基本特性(ACID)
原子性:一個事務要麼都提交要麼都不提交
一致性:AB轉賬事務提交後總金額不發生改變 隔離性:事務隔離級別 read uncommitted 讀未提交 存在:髒讀 不可重複讀 幻讀 讀取了另一個事務未提交的資料 read committed讀已提交 存在:不可重複讀 幻讀 解決了髒讀 讀已提交,一個事務讀到另一個事務已經提交的資料。 repeatable read:可重複讀 存在: 幻讀,針對 insert操作 一個事務中讀到的資料始終保持一致,無論另一個事務是否提交 serializable:序列化 只能執行一個事務 永續性:一個事務一旦提交,它對資料庫中資料的改變應該是永久性的
事務的傳播 方法A 呼叫方法B AB中的事務的傳播
@Transactional(propagation(傳播) = Propagation.REQUIRED)
REQUIRED:沒有事務建立 有加入事務
SUPPORTS:有事務就用沒有就不用
一般情況下,生產環境中都是使用預設的Required
只讀事務:優化手段
@Transactional(readOnly = true)用於查詢
重點 宣告事務
事務管理器 資料來源 切面(切點+增強)
xml配置事務:
//事務管理器
//資料來源
//配置增強處理 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- <tx:method > 標籤作用:批量設定切入點方法的事務屬性 name屬性:指定業務層的方法名稱,可以使用*萬用字元 propagation屬性:事務的傳播行為,預設REQUIRED,可以省略 isolation屬性:事務的隔離級別,預設使用資料庫的隔離級別,可以省略 read-only屬性:是否只讀事務,預設為false,可以不填 --> <tx:method name="find*" read-only="true" propagation="SUPPORTS"/> <tx:method name="select*" read-only="true" propagation="SUPPORTS"/> <tx:method name="*"></tx:method> </tx:attributes> </tx:advice> <!--配置AOP宣告式事務 配置切面 引入切點和增強處理--> <aop:config> <!-- 配置aop的通知增強 advice-ref屬性:設定外部標籤的通知增強 pointcut屬性:配置切入點(切入點表示式) --> <aop:advisor advice-ref="txAdvice" pointcut="execution( * com.itheima.service.*.*(..))"/> </aop:config> 註解配置宣告式事務: <!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--配置資料來源--> <property name="dataSource" ref="dataSource"/> </bean> <!--配置註解事務支援--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> @Transactional註解 指定類 方法都開啟事務 指定方法 只有這個方法開啟 (可以和類相互配合 優先選擇類) //查詢propagation傳播方式 readOnly只讀 isolation隔離級別mysql預設REPEATABLE_READ(重複讀) @Transactional(propagation = Propagation.SUPPORTS,readOnly = true,isolation = Isolation.DEFAULT) //增刪改 @Transactional(propagation = Propagation.REQUIRED,readOnly = false,isolation = Isolation.REPEATABLE_READ)
JdbcTemplate
spring提供用於連資料庫
設計模式
工廠模式 BeanFactory
單例模式 scope指定
動態代理 aop底層使用jdk動態代理和cglib動態代理
模板方法模式 JdbcTemplate物件,應用了模板方法模式