spring的事務管理註解
阿新 • • 發佈:2017-06-29
clas lap 謝謝 closed 異常類 ctx ash upd ttr
applicationContext.xml
軟件152班楊錦宏
spring的事務管理,本文的例子是:比如你需要網購一本書,賣書的那一方有庫存量以及書的價格,你有賬戶余額。回想我們在編程中要實現買書這樣的功能,由於你的賬戶表和書的庫存量表肯定不是同一張數據庫表,所以必定會有一個先後,要麽先將賬戶余額扣除書的價格,緊接著將書的庫存量減一,要麽反過來。那麽問題來了,假如我們先將你的賬戶余額減掉,然後發現書的庫存不足,這時怎麽辦呢,這就需要事務了,當我們發現書的庫存不足時就要回滾事務,將你的余額返回去。只要配置了事務,發生了異常,就回滾。這就是事務的回滾。註:新人理解,如有錯誤,望指正,謝謝。
配置文件applicationContext.xml:
配置文件jdbc.propertices:
user=root
password=123
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc\:mysql\:///spring?encoding\=UFT-8
initPoolSize=5
maxPoolSize=20
BookShopDao.java:
package spring.tx;
public interface BookShopDao {
public int findBookPriceByIsbn(String isbn);
public void updataBookStock(String isbn);
public void updataUserAccount(String username,int price);
}
BookShopDaoImp.java:
BookShopDaoImpBookShopService.java:
package spring.tx;
public interface BookShopService {
public void purchase(String username,String isbn);
}
BookShopServiceImpl.java:
BookShopServiceImpl.java
Cashier.java:
package spring.tx;
import java.util.List;
public interface Cashier {
public void checkout(String username,List<String> isbns);
}
CashierImpl.java:
CashierImpl定義兩個異常類:
BookStockException UserAccountExceptionse測試方法:
package spring.tx.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.tx.BookShopDao;
import spring.tx.BookShopService;
import spring.tx.Cashier;
public class SpringTransactionTest {
private ApplicationContext ctx=null;
private BookShopDao bookShopDao;
private BookShopService bookShopService;
private Cashier cashier;
{
ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
bookShopDao =(BookShopDao) ctx.getBean("bookShopDao");
bookShopService=(BookShopService) ctx.getBean("bookShopService");
cashier =(Cashier) ctx.getBean("cashier");
}
@Test
public void testTransactionPropagation(){
List<String > isbns=new ArrayList<String>();
isbns.add("1001");
isbns.add("1002");
cashier.checkout("aaa", isbns);
}
@Test
public void testBookShopService() {
bookShopService.purchase("aaa", "1001");
}
@Test
public void testupdataBookStock(){
bookShopDao.updataBookStock("1001");
}
@Test
public void testUpdataUserAccount(){
bookShopDao.updataUserAccount("aaa", 200);
}
@Test
public void testBookShopDao(){
int price=bookShopDao.findBookPriceByIsbn("1001");
System.out.println(price);
}
}
spring的事務管理註解