如果你使用了listener监听器来加载配置,一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的.如下 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器)…
Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Feign去调用别的微服务时,当我们有多个Feign客户端(比如:用户微服务.商品微服务)时,是可以为每个Feign客户端配置不同的实现,比如:用户微服务使用Feign默认的契约,而商品微服务可以使用Spring MVC 的契约格式,那么这个是怎么实现的呢?此处我们写一个简单的例子来模拟一下. 二.需求…
在springMVC类上绑定@Transactional的注解,但是访问数据库时,总是报 can't localtion to current JTA Transactional. 后来发现springMVC和spring的注解扫描不能有重叠, @Scope("singleton") @Controller @RequestMapping("/shouxun") @Transactional public class ShouXunInterface { priva…
前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务. 确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务.我猜大部分小伙伴也是这样用的,而且一直用一直爽. 但如果你使用不当,它也会坑你于无形. 今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了.…
使用默认的事务处理方式 因为在java的设计中,它认为不继承RuntimeException的异常是”checkException”或普通异常,如IOException,这些异常在java语法中是要求强制处理的.对于这些普通异常,spring默认它们都已经处理,所以默认不回滚.可以添加rollbackfor=Exception.class来表示所有的Exception都回滚. 内部调用 不带事务的方法调用该类中带事务的方法,不会回滚.因为spring的回滚是用过代理模式生成的,如果是一个不带事务…
父子上下文(WebApplicationContext) 假设你使用了listener监听器来载入配置.一般在Struts+Spring+Hibernate的项目中都是使用listener监听器的. 例如以下 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> Spring会创建一个WebAp…
原文 https://blog.csdn.net/jiesa/article/details/53438342 [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring AOP啊,事务管理真轻松啊,真轻松:事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务:轻量级,测试起来也简单,嘿!”.不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事.所以,我们“一直用它”. 不过,最近的一个项目里,却碰到了一个事务管理上的问题:有一个服务类,其一个声明了事务…
http://blog.csdn.net/z69183787/article/details/37819627#comments 一.声明式事务配置: <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref=&quo…
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动springmvc和启动spring,其中,在 <servlet> <servlet-name>springMVC(名字任意)</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherS…
最近在做spring 项目中突然发现事务在遇到异常是没有回滚而是提交了,在查了大量的资料之后,算是有了一点头绪,写下来方便以后查找: 前些日子一朋友在需要在目标对象中进行自我调用,且需要实施相应的事务定义,且网上的一种通过BeanPostProcessor的解决方案是存在问题的.因此专门写此篇帖子分析why. 1.预备知识 aop概念请参考[http://www.iteye.com/topic/1122401]和[http://jinnianshilongnian.iteye.com/blog/…
只要避开Spring目前的AOP实现上的限制,要么都声明要事务,要么分开成两个类,要么直接在方法里使用编程式事务 [问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring AOP啊,事务管理真轻松啊,真轻松:事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务:轻量级,测试起来也简单,嘿!”.不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事.所以,我们“一直用它”. 不过,最近的一个项目里,却碰到了一个事务管理上的问题:有一个服务类,其一个声明了事…
原创内容,转发请保留:http://www.cnblogs.com/iceJava/p/6930118.html,谢谢 之前遇到该问题,今天查看了下 spring 4.x 的代码 一,先理解下 context:component-scan 处理过程: <!-- scan the package and the sub package --> <!-- [重要]:容易产生事务失效的地方,见:http://jinnianshilongnian.iteye.com/blog/1762632 处…
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt113 <!--[if !supportLists]-->一.<!--[endif]-->声明式事务和注解事务并存的情况下,事务失效. 该情况常见配置如下: <!--事务声明--> <bean name="transactionManager" class="org.springframework.jdbc.dat…
在很多情况,我们需要先获取spring容器上下文,即webApplicationContext,然后通过webApplicationContext来获取其中的bean.典型的情况是,我想在一个并未委托给spring容器管理的对象里,去引用一个spring容器管理的对象,此时,@Resource注解是无法发挥作用的.此时必须使用webApplicationContext.getBean("beanName")才能从容器中取到这个java对象,不然我们就只能自己去new了. 方法1::Ap…
1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ssm.service.BTestService.getPhoneKey at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:2…
http://blog.csdn.net/paincupid/article/details/51822599 Spring事务失效的原因 5种大的原因 如使用mysql且引擎是MyISAM,则事务会不起作用,原因是MyISAM不支持事务,可以改成InnoDB 假如有兴趣了解 mysql中 ” engine=innodb ” 以及 ” engine=innodb 和engine=myisam的区别 “,可以读读这篇文章:http://blog.sina.com.cn/s/blog_6ac4c6c…
本文由作者张远道授权网易云社区发布. spring父子容器 spring总的上下文容器有父子之分.父容器和子容器.父容器对子容器可见,子容器对父容器不可见. 对于传统的spring mvc来说,spring mvc容器为子容器,也就是说ServletDispatcher对应的容器为子容器,而web.xml中通过ConextLoaderListener的contextConfigLocation属性配置的为父容器. 使用场景 父子容器的主要用途之一便是是上下文隔离.考虑以下一种场景. projec…
不开事务几种情形 ① @Transactional写在了private方法上 org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#computeTransactionAttribute ② 普通方法doTask3调用同一个类中有注解的方法doTask3Out, 并没有开启事务 参考: https://www.cnblogs.com/milton/p/6046699.html…
今天再来一篇<吊打面试官>系列,这次真的要吊打了,哈哈!(看往期吊打系列请在后台回复:吊打,我会陆续更新--) 前几天栈长不是发了一篇文章,里面有一个关于事务失效的问题: 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 其中有个热心粉丝留言分享了下,我觉得总结得有点经验,给置顶了: 以上留言来源微信公众号:Java技术栈,关注一起学Java! 但是我觉得还是总结得不够全,今天栈长我再总结一下,再延着这位粉丝的总结再补充完善一下,不用说,我肯定也不见得总结全…
系列文章索引: Spring事务Transactional和动态代理(一)-JDK代理实现 Spring事务Transactional和动态代理(二)-cglib动态代理 Spring事务Transactional和动态代理(三)-事务失效的场景 一. Spring事务分类 Spring 提供了两种事务管理方式:声明式事务管理和编程式事务管理. 1.1编程式事务 在 Spring 出现以前,编程式事务管理对基于 POJO 的应用来说是唯一选择.我们需要在代码中显式调用 beginTransact…
之前我们讲的分布式事务的调用都是在一个service中的事务方法,去调用另外一个service中的业务方法, 如果在一个sevice中存在两个分布式事务方法,在一个seivice中两个事务方法相互嵌套调用,对分布式事务有啥影响了 现在TestSevice中存在两个事务方法,funcA和FunctionB 现在有下面这样的一个需求 我们来看下具体的业务代码 package com.atguigu.spring.tx.xml.service.impl; import org.springframew…
隔离级别 在 TransactionDefinition.java 接口中,定义了"四种"的隔离级别枚举: /** * [Spring 独有]使用后端数据库默认的隔离级别 * * MySQL 默认采用的 REPEATABLE_READ隔离级别 * Oracle 默认采用的 READ_COMMITTED隔离级别 */ int ISOLATION_DEFAULT = -1; /** * 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读.幻读或不可重复读 */ int ISOLAT…
前言 相信大家都遇到一种事务失效场景,那就是 Spring 自调用,就是在 Service 方法内,调用另一个加 @Transactional 注解的方法,发现事务失效,这时候你是怎么解决的呢? 公众号:『 刘志航 』,记录工作学习中的技术.开发及源码笔记:时不时分享一些生活中的见闻感悟.欢迎大佬来指导! 事情回顾 那是一个我忘了天气咋样的下午,突然蹦出一个小红点,嗯~ 挺着急的小红点. 原来是事务失效了! 莫慌!莫慌! 最后小伙伴选择了抽走,是我的工具类不香了么? 当然故事的结果是完美的,问题…
小明:靓仔,我最近遇到了很邪门的事. 靓仔:哦?说来听听. 小明:上次看了你的文章<就这?一篇文章让你读懂 Spring 事务>,对事务有了详细的了解,但是在项目中还是遇到了问题,明明加了事务注解 @Transactional,却没有生效. 靓仔:那今天我就给你总结下哪些场景下事务会失效. 1.数据库引擎不支持事务 Mysql 常用的数据库引擎有 InnoDB 和 MyISAM,其中前者是支持事务的,而后者并不支持,MySQL 5.5.5 以前的默认存储引擎是:MyISAM,之前的版本默认的都…
老项目加新功能,导致出现service调用service的情况..一共2张表有数据的添加删除.然后测试了一下事务,表A和表B,我在表B中抛了异常,但结果发现,表B回滚正常,但是表A并没有回滚.显示事务失效. 比较巧的是表A和表B是在不同的service中,所以最开始想到的是多service导致的,但是查看了事务的定义后发现,事务的传播被设置成required,所以按理说所有service会处在一个事务中.经过痛苦的各种折腾各种尝试未果后,无意中发现每次都是表A事务无法回滚,这就有点奇怪了,这明显…
使用listener听众载入配置,一般Struts+Spring+Hibernate是使用listener监听器的.例如以下 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> Spring会创建一个WebApplicationContext上下文,称为容器.保存在 ServletContex…
一.问题今天发现用户注册的Service的事务并没有起到作用,再抛出一个RuntimeException后,并没有发生回滚,下面是调试步骤: 1.检查数据库的引擎是否是innoDB 2.启动类上是否加入@EnableTransactionManagement注解 3.是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解 4.方法是否为public 5.是否是因为抛出了Exception等checked异常 然而事务失效都不是这些原因引起的,…
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解.您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等.本文将直接使用这些概念而不做详细解释.另外,您最好掌握数据库的基础知识,虽然这不是必须. 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带…
SpringMVC回归MVC本质,简简单单的Restful式函数,没有任何基类之后,应该是传统Request-Response框架中最好用的了. Tips 1.事务失效的惨案 Spring MVC最打击新人的事情,你必须保证spring-mvc.xml的context:component-scan只扫描Controller,而 applicationContext.xml里的不包含Controller. 否则你定义在applicationContext.xml里的事务就要失效了.方法如下: sp…
1. 引言  事务特性 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性.事务通常是以begin transaction开始,以commit或rollback结束.Commint表示提交,即提交事务的所有操作.具体地说就是将事务中所有对数据的更新写回到磁盘上的物理数据库中去,事务正常结束.Rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将…