`
tianqing_525
  • 浏览: 17012 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Spring扫描所有包导致事务失效

 
阅读更多

如果用注解,扫描所有包,会导致事务不起作用,spring-servlet.xml,只扫描Controller类型的bean:

<!-- 扫描所有的controller -->
    <context:component-scan base-package="com.test.sso.web">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 如果base-package中的包定位到web,则不需要额外加其他配置,如果base-package="com.test",则不仅仅扫描@Controller注解的Bean,而且还扫描了@Component的子注解@Service、@Reposity。因为use-default- filters默认为true。所以如果不需要默认的,则use-default-filters=“false”禁用掉。

  因此也可将上面的配置修改为:

    <context:component-scan base-package="com.test" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 

applicationContext-dbaop.xml,去除Controller类型的bean:

 

<context:component-scan base-package="com.test"> 
        <context:exclude-filter type="regex" expression="com.test.sso.web.*"/> 
    </context:component-scan>

 

这样AOP事务就会起作用了!

 use-default-filters="false"这个配置的作用!

因为服务器启动时的加载配置文件的顺序为web.xml---applicationContext-dbaop.xml(Spring 事务的AOP代理的配置文件)---spring-servlet.xml(SpringMVC的配置文件),事务的AOP代理没有配置在SpringMVC配置文件中,从而造成新加载的bean覆盖了老的bean,造成事务失效。只要使用use-default-filters=“false”禁用掉默认的行为就可以了。

 

参考文章: http://www.iteye.com/topic/1072244

                http://www.iteye.com/topic/1128522

                http://panyongzheng.iteye.com/blog/1477691

 

 

分享到:
评论

相关推荐

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    Spring+SpringMVC配置事务管理无效原因及解决办法详解

    在 application.xml 中配置的事务管理会被 SpringMVC 重复扫描,导致事务管理无效。 解决办法 要解决 Spring+SpringMVC 配置事务管理无效的问题,需要正确配置 Spring 和 SpringMVC 的配置文件。Spring 的配置文件...

    auto-spring:自动生成spring配置文件`spring.factories`

    5. **版本兼容性**:确保`auto-spring`与所使用的Spring Boot版本兼容,避免因版本不匹配导致的问题。 6. **调试与问题排查**:当生成的`spring.factories`不生效或出现错误时,需要熟悉Spring Boot的启动流程和...

    SSM框架整合演示代码

    在SSM整合中,避免了SpringMVC与Spring注解重复扫描导致的事务失效问题,这可能涉及到Spring的扫描范围设置。当两个不同组件扫描相同范围的类时,可能会出现事务管理器无法正确识别事务边界的问题。通过合理配置扫描...

    aop编程jar包

    如果这个库出现问题,Spring可能无法找到或处理切面注解,进而导致AOP功能失效。 5. **问题解决** 如果在使用注解进行AOP编程时遇到问题,首先检查是否正确引入了aspectjrt.jar和aspectjweaver.jar,并确保它们的...

    SpringMVCHibernate集成及常见问题总结

    - **事务管理**:Spring的事务管理可能因为配置不当导致事务无法正常回滚或提交。 - **缓存问题**:Ehcache的配置可能导致缓存失效、更新不及时等问题。 - **资源文件**:国际化消息文件的路径和编码设置不当可能...

    4、乐信(25问)1

    例如,如果事务A先提交,事务B失败,事务A需要执行补偿操作来撤销已提交的状态。 【RabbitMQ实现消息最终一致性】 RabbitMQ可以通过发送方确认、消息持久化和消费者确认机制实现消息的可靠传输和最终一致性。消息...

    解决springboot的aop切面不起作用问题(失效的排查)

    如果我们的项目特别大,对所有的Service都加上事务显得非常麻烦。我们可以使用AOP来实现全局事务。例如: ```java @Aspect @Configuration public class TransactionAdviceConfig { private static final String ...

    mysql_optimization

    还可以使用Spring Data JPA或Hibernate,它们提供了ORM功能,简化数据库操作,同时也能进行缓存管理和事务控制。 7. **数据库设计优化**:遵循数据库设计范式,避免数据冗余和异常。通过数据库规范化减少数据更新...

    面试总结2019年9月3日.doc

    9. **何时不会使用索引**:全表扫描时,如使用了NOT IN, NOT EXISTS, OR条件且未优化,或者使用了函数操作索引字段,可能导致索引失效。 10. **Mybatis动态代理的实现**:Mybatis使用JDK动态代理或CGLIB动态代理,...

    Hibernate配置常见错误

    对于Spring整合Hibernate的情况,确保@Transactional注解的使用正确。 总结,Hibernate配置错误主要集中在SessionFactory创建、实体类配置、数据库连接、属性映射、懒加载、HQL查询和事务管理等方面。解决这些问题...

    面试.docx

    6. **索引失效情况**:索引失效可能出现在索引列上有计算操作、使用了不兼容的函数、全表扫描等情况。例如,索引列上进行计算会迫使数据库放弃索引,改为全表扫描。 7. **解决索引失效**:避免在索引列上进行计算,...

    2022面试题目java背诵版本

    Spring的AOP(面向切面编程)允许程序员定义“横切关注点”,如日志、事务管理等,然后将这些关注点与业务逻辑分离。它的实现基于动态代理,可以是JDK动态代理或CGLIB。 2. **HashMap底层数据结构**: HashMap...

    程序员面试2023,集结了阿里、腾讯、京东、美团一线大厂面试实战

    12. **缓存问题及解决方案**:缓存穿透、缓存击穿和缓存雪崩分别对应无数据请求、热点数据过期和大量并发请求导致缓存失效,可以通过布隆过滤器、热点数据预加载和限流策略等解决。 13. **LRU(Least Recently Used...

    (2024)跳槽涨薪必备精选面试题.pdf

    - Spring 使用 AOP 和声明式事务管理。 - 支持多种事务管理器,如 JTA、JDBC、Hibernate 等。 7. **Spring容器启动流程** - 加载配置文件。 - 创建 BeanFactory。 - 注册后处理器。 - 初始化 Bean。 8. **...

    详解springboot中使用异步的常用两种方式及其比较

    5. 异步类需使用 @Component 注解,不然将导致 Spring 无法扫描到异步类。 6. Spring Boot 框架必须在启动类中增加 @EnableAsync 注解。 7. 异步方法不要和事务注解同时存在。 第二种方式:使用 CompletableFuture ...

    mybatis学习笔记

    - 数据库连接创建和释放频繁可能导致系统资源浪费。 - SQL语句硬编码在代码中,不易维护。 - PreparedStatement中设置参数可能存在硬编码问题。 - 结果集解析存在硬编码问题。 ##### 1.2 MyBatis介绍 - **背景...

Global site tag (gtag.js) - Google Analytics