當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring的事务控制-基于xml方式
生活随笔
收集整理的這篇文章主要介紹了
Spring的事务控制-基于xml方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹:該程序模擬了轉賬操作,即Jone減少500元,tom增加500元
1.導入坐標
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.9.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.9.RELEASE</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>2.創建Account實體類
public class Account {private String name;private String money;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMoney() {return money;}public void setMoney(String money) {this.money = money;} }3.創建AccountDao接口以及實現類AccountDaoImpl;
public interface AccountDao {public void out(String outMan,double money);public void in(String inMan,double money); } public class AccountDaoImpl implements AccountDao {private JdbcTemplate template;public void setTemplate(JdbcTemplate template) {this.template = template;}@Overridepublic void out(String outMan, double money) {template.update("update account set money=money-? where name=?",money,outMan);}@Overridepublic void in(String inMan, double money) {template.update("update account set money=money+? where name=?",money,inMan);} }4.創建AccountService接口以及AccountServiceImpl實現類
public interface AccountService {public void transfer(String outMan,String inMan,double money); } public class AccountServiceImpl implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}@Overridepublic void transfer(String outMan, String inMan,double money) {accountDao.out(outMan,money);accountDao.in(inMan,money);}}5.編寫spring配置文件(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--將AccountDao注入到spring容器--><bean id="accountDao" class="com.hao.dao.impl.AccountDaoImpl"><property name="template" ref="jdbcTemplate"/></bean> <!--將AccountService注入到spring容器--><bean id="accountService" class="com.hao.service.impl.AccountServiceImpl"><property name="accountDao" ref="accountDao"/></bean> <!-- 配置數據源--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/><property name="user" value="root"/><property name="password" value="hao20001010"/></bean> <!-- 將模板對象注入到spring容器--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean> </beans>6.數據庫表的創建
7.測試
public class AccountController {public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");AccountService service= context.getBean(AccountService.class);service.transfer("Jone","tom",500);} }結果:
將Jone和tom的錢修改為5000元
當我們在業務方法transfer中手動加入錯誤代碼,讓其報錯
再此運行,我們發現控制臺報錯,接著查看數據庫中的數據
出現這樣的原因就是,當程序執行完accountDao.out(outMan,money)時,Jone的錢減少500,但是當執行下一步int i=1/0時,程序出現錯誤,然后就不再執行下一步功能了,所有出現了這樣的情況;
這樣的問題該怎么解決呢?
利用aop思想,將事務提取出來交給spring管理,在程序運行時,與方法進行切入即可;這樣可以保證如果程序運行時出現錯誤,則雙方的金額都不會改變
將金額修改為5000元
再次運行:
===================================================
<tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>1.name:切入點方法名稱
2.isolation:事務的隔離級別
3.propogation:事務的傳播行為
4.timeout:超時時間
5.read-only:是否只讀
總結
以上是生活随笔為你收集整理的Spring的事务控制-基于xml方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程式事务控制相关对象
- 下一篇: Spring的事务控制-基于注解的方式