javascript
Spring配置事务的五种方式
?
?Java事務(wù)的類(lèi)型有三種:
JDBC事務(wù)、?可以將多個(gè) SQL 語(yǔ)句結(jié)合到一個(gè)事務(wù)中。JDBC 事務(wù)的一個(gè)缺點(diǎn)是事務(wù)的范圍局限于一個(gè)數(shù)據(jù)庫(kù)連接。一個(gè) JDBC 事務(wù)不能跨越多個(gè)數(shù)據(jù)庫(kù)
JTA(Java Transaction API)事務(wù)、事務(wù)可以跨越多個(gè)數(shù)據(jù)庫(kù)或多個(gè)DAO,使用也比較復(fù)雜。
容器事務(wù)。主要指的是J2EE應(yīng)用服務(wù)器提供的事務(wù)管理,局限于EJB應(yīng)用使用。
?
spring事務(wù)的配置方式編程式事務(wù)和聲明式事務(wù),相信大家都知道是有5種,但我們經(jīng)常使用的應(yīng)該就是基于注解和tx標(biāo)簽配置攔截器兩種方式了
?
?
| 1 2 3 4 5 6 7 8 9 10 | ???<bean?id="sessionFactory" ?????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">??? ????????<property?name="configLocation"?value="classpath:hibernate.cfg.xml"?/>??? ????????<property?name="configurationClass"?value="org.hibernate.cfg.AnnotationConfiguration"?/>? ????</bean> <!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> ??<bean?id="transactionManager" ??????class="org.springframework.orm.hibernate3.HibernateTransactionManager">? ??????<property?name="sessionFactory"?ref="sessionFactory"?/>? ??</bean> |
ps:聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是對(duì)方法前后進(jìn)行攔截,然后在目標(biāo)方法開(kāi)始之前創(chuàng)建或者加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。
?
1、基于注解,DAO上需加上@Transactional注解
?
| 1 | <tx:annotation-driven?transaction-manager="transactionManager"/> |
2、使用tx標(biāo)簽配置的攔截器
?
| 1 2 3 4 5 6 7 8 9 10 11 12 | <tx:advice?id="txAdvice"?transaction-manager="transactionManager">? ????<tx:attributes>? ????????<tx:method?name="*"?propagation="REQUIRED"?/>? ????</tx:attributes>? </tx:advice>? <aop:config>? ????<aop:pointcut?id="interceptorPointCuts" ????????expression="execution(* com.bluesky.spring.dao.*.*(..))"?/>? ????<aop:advisor?advice-ref="txAdvice" ????????pointcut-ref="interceptorPointCuts"?/>????????? </aop:config> |
3、使用攔截器
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <bean?id="transactionInterceptor" ???????class="org.springframework.transaction.interceptor.TransactionInterceptor">??? ???????<property?name="transactionManager"?ref="transactionManager"?/>??? ???????<!-- 配置事務(wù)屬性 --> ???????<property?name="transactionAttributes">??? ???????????<props>??? ???????????????<prop?key="*">PROPAGATION_REQUIRED</prop>??? ???????????</props>??? ???????</property>??? ???</bean>? ???<bean?class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">??? ???????<property?name="beanNames">??? ???????????<list>??? ???????????????<value>*Dao</value>? ???????????</list>??? ???????</property>??? ???????<property?name="interceptorNames">??? ???????????<list>??? ???????????????<value>transactionInterceptor</value>??? ???????????</list>??? ???????</property>??? ???</bean> |
?
4、所有Bean共享一個(gè)代理基類(lèi)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <bean?id="transactionBase" ????????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" ????????lazy-init="true"?abstract="true">??? ????<!-- 配置事務(wù)管理器 --> ????<property?name="transactionManager"?ref="transactionManager"?/>??? ????<!-- 配置事務(wù)屬性 --> ????<property?name="transactionAttributes">??? ????????<props>??? ????????????<prop?key="*">PROPAGATION_REQUIRED</prop>??? ????????</props>??? ????</property>??? </bean> ????<!-- 配置DAO --> ????<bean?id="userDaoTarget"?class="com.bluesky.spring.dao.UserDaoImpl">? ????????<property?name="sessionFactory"?ref="sessionFactory"?/>? ????</bean>? ????<bean?id="userDao"?parent="transactionBase"?>??? ????????<property?name="target"?ref="userDaoTarget"?/>???? ????</bean> |
?
5、每個(gè)Bean都有一個(gè)代理
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <bean?id="userDao" ????????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">??? ???????????<!-- 配置事務(wù)管理器 --> ???????????<property?name="transactionManager"?ref="transactionManager"?/>?????? ????????<property?name="target"?ref="userDaoTarget"?/>??? ?????????<property?name="proxyInterfaces"?value="com.bluesky.spring.dao.GeneratorDao"?/>? ????????<!-- 配置事務(wù)屬性 --> ????????<property?name="transactionAttributes">??? ????????????<props>??? ????????????????<prop?key="*">PROPAGATION_REQUIRED</prop>? ????????????</props>??? ????????</property>??? ????</bean> |
?
轉(zhuǎn)載于:https://www.cnblogs.com/shuchen007/p/9202758.html
總結(jié)
以上是生活随笔為你收集整理的Spring配置事务的五种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js判断软键盘是否开启弹出
- 下一篇: 搜索框制作