一例spring巢狀事務

2021-08-22 14:11:56 字數 2000 閱讀 4714

最近看了看社群的精華貼,知道原來service之間是可以巢狀事務的,前些日子還托同事去網路查,險些聽信了網上事務只能封裝對dao一層的操作的說法。 於是開始動手試驗,照新的觀點,只要兩個事務傳播屬性都為propagation_required即可。

servicea 定義:

package ht.business.test;

import ht.business.dao.businessdao;

import ht.business.model.business;

public class businessservice

/*** @param businessdao 要設定的 businessdao

*/public void setbusinessdao(businessdao businessdao)

public business addbusiness()

}

service b 定義:

package ht.workflow.test;

import ht.workflow.dao.worktabdao;

import ht.workflow.model.worktab;

import ht.business.model.business;

import ht.business.test.*;

public class workflowservice

/*** @param businessservice 要設定的 businessservice

*/public void setbusinessservice(businessservice businessservice)

/*** @return worktabdao

*/public worktabdao getworktabdao()

/*** @param worktabdao 要設定的 worktabdao

*/public void setworktabdao(worktabdao worktabdao)

public void addworktab()

}

測試類定義:

package ht;

import org.springframework.dao.dataacces***ception;

import ht.workflow.test.*;

public class testwb ;

workflowservice wfs=(workflowservice)ctx.getbean("workflowmanager");

trycatch(dataacces***ception e)

}}

<?xml version="1.0" encoding="utf-8"?>		

org.hibernate.dialect.oracledialect

true

50true

ht/business/model/business.hbm.xml

ht/workflow/model/worktab.hbm.xml

propagation_required

propagation_required

目的: service a 用來向business表插入一條記錄 .

service b 呼叫service a 向business表插入一條記錄後,再向worktab表插入一條記錄。

若service a異常,事務回滾,兩個表都沒有資料。

若service a正常執行,但在向worktab表插入資料時候異常,整個事務回滾,兩個表仍然都沒有插入資料。

若service a正常執行,後面插入worktab也資料正常,則兩個表都插入資料。

題外話:當軟體開發基本上只要熟悉操作手冊進行配置,當能力被熟練程度所代替,不知道我們還剩下多少創造力可以發揮了。

巢狀Makefile問題解決一例

先看一下目錄結構 總控makefile如下 1 cflags wall2 cc gcc3 4 5 subdirs server client6 7 export cflags cc8 9 10 11 all subdirs 12 13 subdirs 14 make c 15 16 17 clean...

演算法優化一例

本文將以排序演算法中的插入排序為例,介紹優化演算法,編制高效程式的方法。人們通常用於排序手中橋牌的方法是一次考慮一張牌,將它插入到已經排序過的牌的適當位置中 時刻讓它們保持有序 在計算機實現中,我們需要將較大的元素移到右邊,為插入的元素準備空間,然後再在空位置上插入該元素。該演算法的通常的乙個實現如...

delegate 委託一例

using system using system.collections.generic using system.linq using system.text namespace consoletest public static void englishgreeting string snam...