博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AspectJ声明式事务配置
阅读量:6525 次
发布时间:2019-06-24

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

hot3.png

Spring声明式事务配置,实现模拟转账过程 (AspectJ)

编程式事务要修改service层的代码,很少用,相比之下,AspectJ增强事务管理器,在xml中配置切面切点(AOP),而service代码不用做修改。

1.新建数据表

DROP TABLE IF EXISTS `account`;CREATE TABLE `account` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(20) NOT NULL,  `money` double unsigned zerofill DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;INSERT INTO `account` VALUES ('1', 'aa', '1000');INSERT INTO `account` VALUES ('2', 'bb', '1000');INSERT INTO `account` VALUES ('3', 'cc', '1000');

2.新建项目,引入jar包

org.apache.commons
commons-lang3
3.4
log4j
log4j
1.2.17
junit
junit
4.12
test
mysql
mysql-connector-java
5.1.6
org.springframework
spring-context
4.2.1.RELEASE
org.springframework
spring-core
4.2.1.RELEASE
org.springframework
spring-beans
4.2.1.RELEASE
org.springframework
spring-expression
4.2.1.RELEASE
org.springframework
spring-jdbc
4.2.1.RELEASE
org.springframework
spring-tx
4.2.0.RELEASE
org.springframework
spring-test
4.2.1.RELEASE
org.springframework
spring-aop
4.2.1.RELEASE
org.springframework
spring-aspects
4.2.1.RELEASE
c3p0
c3p0
0.9.1.2

3.log4.properties

#console loglog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n#all loglog4j.appender.DAILY_ALL=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.DAILY_ALL.layout=org.apache.log4j.PatternLayoutlog4j.appender.DAILY_ALL.layout.ConversionPattern="%p %d{yyyy-MM-dd HH:mm:ss} %-50.50c(%L) - %m%nlog4j.appender.DAILY_ALL.File=d:/myjaval.loglog4j.appender.DAILY_ALL.DatePattern='.'yyyy-MM-dd#logger#log4j.logger.org.springframework=INFO,CONSOLE#log4j.logger.org.hibernate=INFO,CONSOLE#log4j.logger.org.apache=INFO,CONSOLElog4j.rootLogger=INFO,CONSOLE,DAILY_ALL

4.jdbc.properties

jdbc_driverClassName=com.mysql.jdbc.Driverjdbc_url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8jdbc_username=rootjdbc_password=root

5.applicationContext.xml

classpath:jdbc.properties

6.DAO以及实现

package cn.dx.spring.transaction2.dao;public interface AccountDao {		/**	 * @param out 转出账户	 * @param money 转出金额	 */	void outMoney(String out,Double money);		/**	 * @param in	:传入账号	 * @param money :转入金额	 */	void inMoney(String in,Double money);}

package cn.dx.spring.transaction2.dao.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Component;import cn.dx.spring.transaction2.dao.AccountDao;@Component("AccountDao")public class AccountDaoImpl implements AccountDao {	@Autowired	private JdbcTemplate jdbcTemplate; 		@Override	public void outMoney(String out, Double money) {		String sql = "update account set money = money - ? where name = ?";		this.jdbcTemplate.update(sql,money,out);	}	@Override	public void inMoney(String in, Double money) {		String sql = "update account set money = money + ? where name = ?";		this.jdbcTemplate.update(sql,money,in);	}}

7.service以及实现

package cn.dx.spring.transaction2.service;/** * 转账Service * @author 大雄 * */public interface AccountService {		/**	 * 	 * @param out:转出账户	 * @param in:转入账户	 * @param money:转账金额	 */	void transfer(String out,String in,Double money);	}

package cn.dx.spring.transaction2.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Service;import cn.dx.spring.transaction2.dao.AccountDao;import cn.dx.spring.transaction2.service.AccountService;@Service("AccountService")public class AccountServiceImpl implements AccountService {	@Autowired	@Qualifier("AccountDao")	private AccountDao accountDao;		@Override	public void transfer(final String out,final String in,final Double money) {				accountDao.outMoney(out, money);		int i = 1/0;	    accountDao.inMoney(in, money);			}}

8.测试

package cn.dx.myjava.spring.transaction;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import cn.dx.spring.transaction.service.AccountService;/** * 编程式事务管理 * 转账测试 * @author 大雄 * */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext.xml")public class Transtraction {	//测试业务层的类	@Autowired	@Qualifier("AccountService")	private AccountService accountService;		@Test	public void  transaction(){		this.accountService.transfer("aa", "bb", 200d);	}	}

转载于:https://my.oschina.net/daxiong0615/blog/502476

你可能感兴趣的文章
Mozilla 开源支持计划:首批捐助 7 开源项目 50 万美元
查看>>
《Photoshop混合模式深度剖析》目录—导读
查看>>
《为iPad而设计:打造畅销App》——抓住iPad的核心用法
查看>>
华尔街宫斗戏升温:银行巨头和纽交所争夺交易数据所有权
查看>>
《精通自动化测试框架设计》—第2章 2.6节使用数据库
查看>>
《网站性能监测与优化》一2.4 软件服务应用网站
查看>>
《HTML5 开发实例大全》——1.26 使用鼠标光标拖动网页中的文字
查看>>
【JSP开发】有关session的一些重要的知识点
查看>>
生产库中遇到mysql的子查询
查看>>
redis debug命令详解
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
【转载】WinCE6.0 Camera驱动源码分析(二)
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>