国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Spring事務配置

2019-11-14 20:50:47
字體:
來源:轉載
供稿:網友
SPRing事務配置

  1、首先要配置txManager

    下面的dataSource,是數據連接池,根據項目需要配置對應的連接池

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean>

  2、采用@Transactional注解方式使用事務

<tx:annotation-driven transaction-manager="txManager"/>

    使用方法(掃描bean的配置要開啟):

    當標于類前時, 標示類中所有方法都進行事物處理

    例子:

@Transactionalpublic class PersonServiceBean implements PersonService {}

     當類中某些方法不需要事物時: 

@Transactionalpublic class TestServiceBean implements TestService {        @Transactional(propagation = Propagation.NOT_SUPPORTED)    public List<Object> getAll() {        return null;    }    }

  3、采用基于xml方式配置事務

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><aop:config><aop:pointcut id="transactionPointcut" expression="execution(* cn.itcast.service..*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/></aop:config><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/><tx:method name="*"/></tx:attributes></tx:advice>

  4、指示符

  *為任意通配符

  expression=“execution(* cn.itcast.service..*.*(..))”表示作用在cn.itcast.service包及子包下所有的類的所有方法上

  expression=“execution(* cn.itcast.service..*.*(java.lang.String,..))”表示作用在cn.itcast.service包及子包下所有的類的第一個參數為String類型的方法上

  expression=“execution(java.lang.String cn.itcast.service..*.*(..))”表示作用在cn.itcast.service包及子包下所有的類的返回值類型為String的方法上

  expression=“execution(!java.lang.String cn.itcast.service..*.*(..))”表示作用在cn.itcast.service包及子包下所有的類的返回值類型不是String的所有方法上

  expression=“execution(* set**(..))”表示作用在任意以set開始的方法上

  within-限定匹配特定類型的連接點

  expression=“winthin(cn.itcast.*)”表示作用在cn.itcast包及子包下的所有連接點

  5、事物傳播行為介紹:

  @Transactional(propagation=Propagation.REQUIRED)    如果有事務, 那么加入事務, 沒有的話新建一個(默認情況下)  @Transactional(propagation=Propagation.NOT_SUPPORTED)    容器不為這個方法開啟事務  @Transactional(propagation=Propagation.REQUIRES_NEW)    不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務  @Transactional(propagation=Propagation.MANDATORY)    必須在一個已有的事務中執行,否則拋出異常  @Transactional(propagation=Propagation.NEVER)    必須在一個沒有的事務中執行,否則拋出異常(與Propagation.MANDATORY相反)  @Transactional(propagation=Propagation.SUPPORTS)    如果其他bean調用這個方法,在其他bean中聲明事務,那就用事務.如果其他bean沒有聲明事務,那就不用事務.

  事物超時設置:  @Transactional(timeout=30) //默認是30秒

  事務隔離級別:  @Transactional(isolation = Isolation.READ_UNCOMMITTED)    讀取未提交數據(會出現臟讀, 不可重復讀) 基本不使用  @Transactional(isolation = Isolation.READ_COMMITTED)    讀取已提交數據(會出現不可重復讀和幻讀)  @Transactional(isolation = Isolation.REPEATABLE_READ)    可重復讀(會出現幻讀)  @Transactional(isolation = Isolation.SERIALIZABLE)

    串行化

  MySQL: 默認為REPEATABLE_READ級別  SQLSERVER: 默認為READ_COMMITTED

  臟讀: 一個事務讀取到另一事務未提交的更新數據

  不可重復讀: 在同一事務中, 多次讀取同一數據返回的結果有所不同, 換句話說,后續讀取可以讀到另一事務已提交的更新數據. 相反, "可重復讀"在同一事務中多次讀取數據時, 能夠保證所讀數據一樣, 也就是后續讀取不能讀到另一事務已提交的更新數據

  幻讀: 一個事務讀到另一個事務已提交的insert數據


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘潭县| 兴义市| 封开县| 卫辉市| 永昌县| 乐山市| 海安县| 左权县| 顺昌县| 肥城市| 桂平市| 乌鲁木齐市| 封丘县| 吴旗县| 禄劝| 车致| 曲水县| 福清市| 鹿泉市| 白玉县| 溧水县| 陆丰市| 乐都县| 徐州市| 磴口县| 桂东县| 渝北区| 札达县| 河曲县| 长乐市| 灵丘县| 高阳县| 柯坪县| 枣阳市| 广宗县| 崇阳县| 昭觉县| 芮城县| 卓尼县| 卓尼县| 昭觉县|