博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring_使用XML文件的方式配置事务
阅读量:6256 次
发布时间:2019-06-22

本文共 4156 字,大约阅读时间需要 13 分钟。

步骤:

  1. 正常配置jdbctemplate
  2. 正常配置bean
  3. 配置事物管理器
  4. 配置事物管理器
  5. 配置aop切入点,通过切入点把事物链接起来

思路:

接着上一个买书的例子吧,直接拷到新包下,把注解都干掉,需要自动引入的直接set方法

package com.spring.bean;public interface BookShopDao {    //根据书号获取书的单价    public int findBookPriceByIsbn(String isbn);        //更新数的库存. 使书号对应的库存 - 1    public void updateBookStock(String isbn);        //更新用户的账户余额: 使 username 的 balance - price    public void updateUserAccount(String username, int price);}
package com.spring.bean;import org.springframework.jdbc.core.JdbcTemplate;public class BookShopDaoImpl implements BookShopDao {    private JdbcTemplate jdbcTemplate;        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {        this.jdbcTemplate = jdbcTemplate;    }        public int findBookPriceByIsbn(String isbn) {        String sql = "SELECT price FROM book WHERE isbn = ?";        return jdbcTemplate.queryForObject(sql, Integer.class, isbn);    }    @Override    public void updateBookStock(String isbn) {        //检查书的库存是否足够, 若不够, 则抛出异常        String sql2 = "SELECT stock FROM book_stock WHERE isbn = ?";        int stock = jdbcTemplate.queryForObject(sql2, Integer.class, isbn);        if(stock == 0){            throw new BookStockException("库存不足!");        }                String sql = "UPDATE book_stock SET stock = stock -1 WHERE isbn = ?";        jdbcTemplate.update(sql, isbn);    }    @Override    public void updateUserAccount(String username, int price) {        //验证余额是否足够, 若不足, 则抛出异常        String sql2 = "SELECT balance FROM account WHERE username = ?";        int balance = jdbcTemplate.queryForObject(sql2, Integer.class, username);        if(balance < price){            throw new UserAccountException("余额不足!");        }                String sql = "UPDATE account SET balance = balance - ? WHERE username = ?";        jdbcTemplate.update(sql, price, username);    }}
package com.spring.bean;public interface BookShopService {        public void purchase(String username, String isbn);    }
package com.spring.bean;public class BookShopServiceImpl implements BookShopService {    private BookShopDao bookShopDao;    public void setBookShopDao(BookShopDao bookShopDao) {        this.bookShopDao = bookShopDao;    }    @Override    public void purchase(String username, String isbn) {                try {            Thread.sleep(5000);        } catch (InterruptedException e) {}                //1. 获取书的单价        int price = bookShopDao.findBookPriceByIsbn(isbn);                //2. 更新数的库存        bookShopDao.updateBookStock(isbn);                //3. 更新用户余额        bookShopDao.updateUserAccount(username, price);    }}
package com.spring.bean;import java.util.List;public interface Cashier {    public void checkout(String username, List
isbns); }
package com.spring.bean;import java.util.List;public class CashierImpl implements Cashier {    private BookShopService bookShopService;    public void setBookShopService(BookShopService bookShopService) {        this.bookShopService = bookShopService;    }    @Override    public void checkout(String username, List
isbns) { for(String isbn: isbns){ bookShopService.purchase(username, isbn); } }}

自定义异常不贴了,和上节代码一样

bean配置文件

注意,

如果配置文件正确,报错空指针异常,一般是@Autowired的实体,,没用set方法创建实体

报错信息如下:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from class path resource [beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 15; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明。

一般是配置文件的顶部没有导入相应的aop schema命名空间,把命名空间加上即可。

 

转载地址:http://cgjsa.baihongyu.com/

你可能感兴趣的文章
同步与互斥的区别和联系
查看>>
eclipse中tomcat能正常启动,在浏览器中不能打开问题
查看>>
基于Linux根据僵尸网络病毒平台《比尔盖茨》
查看>>
JNI编程(二) —— 让C++和Java相互调用(2)
查看>>
Android搜索框效果
查看>>
ReportMachine OCX
查看>>
IOS开发--待研究源码(持续添加更新)
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
LinkedHashMap及其源码分析
查看>>
Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
查看>>
环境配置
查看>>
codeforces 468B 2-sat
查看>>
php对uploads文件的处理问题的解决
查看>>
Python urllib简单使用
查看>>
Python - 001 - 类与实例间属性的理解
查看>>
C# 使用xenocode混淆加密【转】
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
查看>>
JavaScript(ECMAScript) with 语句
查看>>
在小米工作是怎样一番体验?
查看>>
VS编译链接时错误(Error Link2005)的解决方法
查看>>