亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

本地事務系列之二:使用PlatformTransactionMan

系統 1993 0
Spring的事務管理器接口:
    
public interface PlatformTransactionManager {

	TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // 獲取事務狀態

	void commit(TransactionStatus status) throws TransactionException; // 提交事務

	void rollback(TransactionStatus status) throws TransactionException; // 回滾事務
}

  


Spring提供的實現
本地事務系列之二:使用PlatformTransactionManager

這里是單數據源,可以使用DataSourceTransactionManager:
FruitShop實現類:
    
public class TransactionalApiJdbcFruitShop extends JdbcDaoSupport implements FruitShop {
	private PlatformTransactionManager txManager;

	public void setTxManager(PlatformTransactionManager txManager) {
		this.txManager = txManager;
	}

	@Override
	public boolean purchase(int fruitId, String userName, int count) {
		TransactionDefinition definition = new DefaultTransactionDefinition();
		TransactionStatus status = txManager.getTransaction(definition);

		String querySql = "SELECT PRICE FROM FRUIT WHERE ID = ?";
		String upStockSql = "UPDATE FRUIT_STOCK SET STOCK = STOCK - ? WHERE ID = ?";
		String upAccountSql = "UPDATE ACCOUNT SET BALANCE = BALANCE - ? WHERE USERNAME = ?";

		try {
			int price = getJdbcTemplate().queryForInt(querySql, new Object[] { fruitId });
			getJdbcTemplate().update(upStockSql, new Object[] { count, fruitId });
			getJdbcTemplate().update(upAccountSql, new Object[] { price * count, userName });
			txManager.commit(status);
		} catch (DataAccessException e) {
			txManager.rollback(status);
			throw e;
		} catch (TransactionException e) {
			txManager.rollback(status);
			throw e;
		}
		return true;
	}
}

  


beans-fruitshop.xml文件:
    
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8" />
  <property name="username" value="spring" />
  <property name="password" value="123456" />
</bean>

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

<bean id="txApiFruitShop" class="com.john.tx.service.impl.TransactionalApiJdbcFruitShop">
  <property name="dataSource" ref="dataSource" /><!--JdbcDaoSupport的子類需要指定dataSource-->
  <property name="txManager" ref="txManager" />
</bean>

  


測試:
    
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/beans-fruitshop.xml" })
public class JdbcFruitShopTest {
	@Resource(name = "txApiFruitShop")
	FruitShop txApiFruitShop;

	@Test
	public void txApiTest() {
		int fruitId = 1;
		String userName = "user1";
		int count = 3;
		txApiFruitShop.purchase(fruitId, userName, count);
	}
}

  

本地事務系列之二:使用PlatformTransactionManager


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99爱免费观看视频在线 | 成人亚洲视频在线观看 | 3级毛片 | 成人a毛片免费全部播放 | 欧美日韩一区二区视频免费看 | 劲爆激情欧美毛片 | 在线欧美视频免费观看国产 | 国产综合色在线视频区色吧图片 | 日本一级毛片 | 国产一区在线免费观看 | 国产1区二区| 美国一级毛片片aa久久综合 | 伊人色婷婷综在合线亚洲 | 亚洲综合成人网在线观看 | 91在线视频免费看 | 国产最新一区二区三区天堂 | 99精品影视 | 国内久久久久高清影视 | 青青青免费视频精品99 | 日本乱中文字幕系列在线观看 | 老师邪恶影院a啦啦啦影院 老师在办公室被躁到白浆 老湿机午夜影院 | 国产亚洲一区二区精品 | 欧美亚洲免费 | 国产成人午夜片在线观看 | 亚洲精品免费观看 | 性短视频在线观看免费不卡流畅 | 九九免费精品视频 | 欧美人zoxxxx另类 | 国产成人一区二区视频在线观看 | 国产成人无精品久久久 | 亚洲精品欧美一区二区三区 | 国产亚洲自在精品久久 | 精品视频一区在线观看 | 曰本性l交视频 | 亚洲无卡视频 | 国产在线观看91精品不卡 | 日本爱情动作片网址 | 日韩欧美亚洲国产一区二区三区 | 一级毛片免费在线播放 | 一道本一区二区三区 | 色婷婷色综合 |