0 0

springmvc的事务0

最近在研究springmvc和mybatis,自己搭了一个工程,今天学到spring的事务碰到个问题,
public void ajaxAdd(@RequestBody UserInfo userInfo,
			HttpServletRequest request, HttpServletResponse response) {
		String msg;
		try {
			request.setCharacterEncoding("utf-8");
			response.setContentType("text/html;charset=utf-8");
			msg = "";
			addUser();
			userInfo.setName("据了解拉进来框架了框架了控件凉快将离开将凉快将离开进口量极乐空间凉快将离开计划");
			userInfoService.insert(userInfo);

			// userInfoService.insert(userInfo);
			msg = "ok";
		} catch (Exception e) {
			log.error("", e);
			msg = "no";
		}
		// userInfo.setName("撒旦法");
		// userInfoService.insert(userInfo);
		try {
			PrintWriter out = response.getWriter();
			out.write(msg);
			out.flush();
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private void addUser() {
		User user = new User();
		user.setId(2L);
		user.setName("ceshi mingc ");
		user.setPassword("111");
		userService.addUser(user);
	}




这个是在control中的一个方法,在这个方法中我要操作两张表,addUser()方法是向第一张表中添加数据,userInfoService.insert(userInfo);是向第二张表中添加数据,我故意让第二次操作出错,想理解一下spring的事务回滚,可是弄了一下午没弄成功,太水了。
哪位高手给指点指点?小弟不剩感激!

问题补充:配置文件:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="writeDataSource" />
</bean>

<!-- spring aop事务配置 -->
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* com.haolw.*.service.*(..))" />
<aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice" />
</aop:config>

<!--启动spring注解功能 -->
<tx:annotation-driven transaction-manager="transactionManager" />

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="Throwable"/>
<!-- <tx:method name="do*" propagation="REQUIRED" /> -->
<tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="remove*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>

<context:component-scan base-package="com.haolw" use-default-filters="false">
<!--将Controller的注解排除掉 -->
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>

springMVC-servlet.xml

<!-- 注解模式 -->
<context:component-scan base-package="com.haolw"
use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>


我用的是springmvc和mybatis

4个答案 按时间排序 按投票排序

0 0

execution(* com.haolw.*.service.*(..))
事务是配置到service层的,你贴的代码是controller的
你把操作数据库的两个方法放到service层,然后在controller里边调用service试试

2014年4月15日 10:46
0 0

spring里边事务是怎么配置的,把配置文件发一下

2014年4月15日 09:18
0 0

你的事物控制的是action层?

2014年4月15日 01:37
0 0

你只需要抛出异常就可以了
userInfoService.insert(userInfo){
  throw new RuntimeException();

}

2014年4月14日 19:12

相关推荐

Global site tag (gtag.js) - Google Analytics