springmvc 事务注册有很多种方法,在此我只mark 用注解方式添加transaction不生效的解决办法。

springmvc 注解方法添加事务步骤:

1.在 spring的 root-context.xml (WEB-INF/)文件中添加事物管理:

  1. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="mysqlDataSource">
  2. </bean>

或者

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

2.添加注解驱动

  1. <tx:annotation-driven transaction-manager="txManager"/>

3.在需要添加事物管理的java类上添加@Transactional

  1. @Service
  2. public class HomeServiceImpl implements HomeService {
  3. @Autowired
  4. private HomeDao homeDao;
  5.  
  6. public static final Logger LOGGER = LoggerFactory.getLogger(HomeServiceImpl.class);
  7. /**
  8. * note:need add throw RuntimeException
  9. */
  10. @Transactional
  11. @Override
  12. public int updateAgeNonException() throws Exception {
  13. try {
  14. Map<String,Integer> map = new HashMap<String,Integer>();
  15. map.put("age", 10);
  16. homeDao.updateAge(map);
  17. map.put("age", 30);
  18. homeDao.updateAge(map);
  19. } catch (Exception e) {
  20. LOGGER.error("debug ****", e);
  21. throw new RuntimeException();
  22. }
  23. return 0;
  24. }
  25. @Override
  26. public int updateAgeException() throws Exception {
  27. try {
  28. Map<String,Integer> map = new HashMap<String,Integer>();
  29. map.put("age", 10);
  30. homeDao.updateAge(map);
  31. //exception
  32. System.out.println(2/0);
  33. map.put("age", 30);
  34. homeDao.updateAge(map);
  35. } catch (Exception e) {
  36.  
  37. LOGGER.error("debug ****", e);
  38.  
  39. throw new RuntimeException();
  40. }
  41. return 0;
  42. }
  43. public List<String> queryData() {
  44. return homeDao.queryData();
  45. }
  46. }

事物添加以上3步就ok了。

启动server运行一下,看事物是否生效。一般情况下是不会生效的。

原因在于,service方法被注入了2次。解决办法:

1.在root-context.xml 中添加包扫描,扫描所有需要注入的包

  1. <context:component-scan base-package="com.ck.fm.*"></context:component-scan>

2.在servlet-context.xml配置文件中,包扫描的时候排除扫描service

  1. <context:component-scan base-package="com.ck.fm.*" >
  2. <!-- prevented Service injected twice -->
  3. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
  4. </context:component-scan>

springmvc 用注解方式添加事务不生效解决方法的更多相关文章

  1. (转)使用Spring注解方式管理事务与传播行为详解

    http://blog.csdn.net/yerenyuan_pku/article/details/52885041 使用Spring注解方式管理事务 前面讲解了怎么使用@Transactional ...

  2. SpringMVC的注解方式

    mvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

  3. 【spring cloud】spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法

    spring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法 在spring boot1.x下,使用注解@EnableFeignClients,jar包 ...

  4. 在Springmvc普通类@Autowired注入request为null解决方法

    在Springmvc普通类@Autowired注入request为null解决方法   在类中加入以下注入request对象的代码,运行时发现request为null,注入失败.在@Controlle ...

  5. Windows中Nginx配置nginx.conf不生效解决方法(路径映射)

    Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...

  6. Spring 使用注解方式进行事务管理

    转载:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 使用步骤: 步骤一.在spring配置文件中引入<tx:&g ...

  7. SpringMVC的注解方式配置

    SpringMVC支持使用注解方式配置,比配置文件方式更加灵活易用,是SpringMVC使用的主流模式. 1.在配置文件中开启SpringMVC的注解 <!-- 开启包扫描 --> < ...

  8. SpringMVC源码分析-400异常处理流程及解决方法

    本文涉及SpringMVC异常处理体系源码分析,SpringMVC异常处理相关类的设计模式,实际工作中异常处理的实践. 问题场景 假设我们的SpringMVC应用中有如下控制器: 代码示例-1 @Re ...

  9. el表达式无法获取springmvc的model封装好的数据之解决方法

    近日碰到奇怪的问题,应该挺好解决的,可是就是卡住我两天 下面我来描述一下问题 用的是springmvc,自然需要controller,假设我现在所有的配置都是对的. controller代码 @Req ...

随机推荐

  1. 解决checkbox的attr(checked)一直为undefined问题

    需要做个一个全选的checkbox功能,遇到checkbox的attr("checked")一直为undefined,下面与大家分享下最终的解决方案   最近本屌丝应项目开发需求, ...

  2. ubuntu配置tftp服务

    ubuntu配置TFTP服务: TFTP是用来下载远程文件的最简单的网络协议,基于UDP协议.xinetd是新一代的网络守护进程服务程序,经常用于管理多种轻量型internet服务. sudo apt ...

  3. eclipse安装zylin embedded cdt失败解决办法

    最近再搞嵌入式开发,之前用惯了IDE调试单片机的那种方式,开发2440和am3358驱动时候无法方便的查看寄存器和变量,憋的抓耳挠腮,不爽得很,没有可视化环境进行实时调试观察,太特么蛋疼了.感觉这种情 ...

  4. Maximo7自定义实现WebService

    最近很多人在群里聊这个话题,我就也一个hello world来实现一下. 1.自定义一个类,继承于AppService 代码如下:

  5. Mono.Ceil 无法保存Silverlight 程序集

    一句话: 处理Silverlight程序集之前, 须先移除强名称(StrongNameRemoveHelper), 之后Reflexil 即可一如预期的正常工作.

  6. centos5安装salt-master

    本篇文档主要解决2个问题: 1. centos5通过yum安装的master版本肯定低于centos6安装的minion,所以必须升级salt-master 2. zeromq版本太低会报这个错 20 ...

  7. 用python在linux下获取网卡地址

    使用一个第三方库,名为psutil 代码如下: #!/usr/bin/python # -*- coding:utf-8 -*- import psutil def get_netcard(): ne ...

  8. 基于bootstrap 的datatable插件的使用(php版)

    Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能.详细学习请参考其官网:http://datatables.net/中文网:http:/ ...

  9. 在Linux上配置Zabbix的环境

    useradd -s /bin/false zabbix mkdir /usr/local/zabbix_agent mv /home/zihexin/zabbix_agents_3.2.0.linu ...

  10. MHA故障切换和在线手工切换原理

    一.故障切换的过程 当master_manager监控到主库mysqld服务停止后,首先对主库进行SSH登录检查(save_binary_logs -command=test),然后对mysqld服务 ...