-
原始的TransactionProxyFactoryBean (聲明式事物管理)查看全部
-
數(shù)據(jù)庫幻讀查看全部
-
不可重復(fù)讀查看全部
-
數(shù)據(jù)庫臟讀查看全部
-
總結(jié): Spring將事務(wù)管理分成了兩類: * 編程式事務(wù)管理 - 手動編寫代碼進行事務(wù)管理(很少使用) * 聲明式事務(wù)管理 - 基于TransactionProxyFactoryBean的方式(很少使用) . 需要為每個進行事務(wù)管理的類,配置一個TransactionProxyFactoryBean進行增強 - 基于AspectJ的xml方式(經(jīng)常使用) . 一旦配置好,類上不需要添加任何東西 - 基于注解(經(jīng)常使用) . 配置簡單,需要在業(yè)務(wù)層類上添加一個@Transactionl的注解查看全部
-
開啟注解的驅(qū)動 <tx:annotation-driven/> 將事務(wù)管理器配置為可以使用注解 <!-- 開啟注解事務(wù) --> <tx:annotation-driven transaction-manager="transactionManager"/>查看全部
-
在業(yè)務(wù)類上使用一個@Transactionl的注解 @Transactionl( 這里面有屬性,如果不寫,就是默認(rèn)的)查看全部
-
/** * @Transactionl注解中的屬性(不寫就全部使用默認(rèn)值) * propagation : 事務(wù)傳播行為 * isolation : 事務(wù)的隔離級別 */ @Transactional public class AccountServiceImpl implements AccountService { //注入轉(zhuǎn)賬的DAO類,使service能夠調(diào)用DAO的方法 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i = 1/ 0 ; accountDao.inMoney(in, money); } } <!--配置事務(wù)管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 開啟注解事務(wù) --> <tx:annotation-driven transaction-manager="transactionManager"/>查看全部
-
使用aspectj配置事務(wù)管理器 <!-- 配置事務(wù)管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置事務(wù)的通知(事務(wù)增強)--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="transfer" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <!-- 配置切入點 --> <aop:pointcut id="pointcut1" expression="execution(* cn.muke.spring.demo3.AccountService+.*(..))"/> <!-- 配置切面,在pointcut1切入點上應(yīng)用txAdvice增強--> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>查看全部
-
原始方式 - 使用xml配置聲明式事務(wù) 開發(fā)中不經(jīng)常使用查看全部
-
** * Spring聲明式事務(wù)管理的方式一 測試類 - 傳統(tǒng)方式 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext2.xml") public class SpringDemo2 { /** * 注入代理類 - 因為代理類進行了增強的操作 */ //@Resource(name = "accountService") @Resource(name="accountServiceProxy") private AccountService accountService; /** * 轉(zhuǎn)賬案例: */ @Test public void demo1() { accountService.transfer("aaa","bbb",200d); } }查看全部
-
基于TransactionProxyFactoryBean的聲明式事務(wù)管理 <!-- 配置業(yè)務(wù)層的代理 --> <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 配置目標(biāo)對象 --> <property name="target" ref="accountService"/> <!-- 注入事務(wù)管理器 --> <property name="transactionManager" ref="transactionManager"/> <!-- 注入事務(wù)屬性 --> <property name="transactionAttributes"> <props> <!-- prop的格式 PROPAGATION - 事務(wù)的傳播行為 ISOLATION - 事務(wù)的隔離級別 readOnly - 只讀(不可以進行修改,插入,刪除的操作) -Exception - 發(fā)生哪些異常,回滾事務(wù) +Exception - 發(fā)生哪些異常,事務(wù)不回滾 --> <prop key="transfer">PROPAGATION_REQUIRED</prop> </props> </property> </bean>查看全部
-
編程式事務(wù)管理 代碼 /** * 轉(zhuǎn)賬案例的業(yè)務(wù)層實現(xiàn)類 */ public class AccountServiceImpl implements AccountService { //注入轉(zhuǎn)賬的DAO類,使service能夠調(diào)用DAO的方法 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } //編程式事務(wù)管理 - 注入事務(wù)管理模版 private TransactionTemplate transactionTemplate; public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } @Override public void transfer(final String out, final String in, final Double money) { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { accountDao.outMoney(out, money); //int i = 1 / 0; accountDao.inMoney(in, money); } }); } }查看全部
-
編程式事務(wù)管理 - 步驟查看全部
-
//編程式事務(wù)管理 - 注入事務(wù)管理模版 private TransactionTemplate transactionTemplate; public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; }查看全部
舉報
0/150
提交
取消