如果用注解,扫描所有包,会导致事务不起作用,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
相关推荐
本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...
在 application.xml 中配置的事务管理会被 SpringMVC 重复扫描,导致事务管理无效。 解决办法 要解决 Spring+SpringMVC 配置事务管理无效的问题,需要正确配置 Spring 和 SpringMVC 的配置文件。Spring 的配置文件...
5. **版本兼容性**:确保`auto-spring`与所使用的Spring Boot版本兼容,避免因版本不匹配导致的问题。 6. **调试与问题排查**:当生成的`spring.factories`不生效或出现错误时,需要熟悉Spring Boot的启动流程和...
在SSM整合中,避免了SpringMVC与Spring注解重复扫描导致的事务失效问题,这可能涉及到Spring的扫描范围设置。当两个不同组件扫描相同范围的类时,可能会出现事务管理器无法正确识别事务边界的问题。通过合理配置扫描...
如果这个库出现问题,Spring可能无法找到或处理切面注解,进而导致AOP功能失效。 5. **问题解决** 如果在使用注解进行AOP编程时遇到问题,首先检查是否正确引入了aspectjrt.jar和aspectjweaver.jar,并确保它们的...
- **事务管理**:Spring的事务管理可能因为配置不当导致事务无法正常回滚或提交。 - **缓存问题**:Ehcache的配置可能导致缓存失效、更新不及时等问题。 - **资源文件**:国际化消息文件的路径和编码设置不当可能...
例如,如果事务A先提交,事务B失败,事务A需要执行补偿操作来撤销已提交的状态。 【RabbitMQ实现消息最终一致性】 RabbitMQ可以通过发送方确认、消息持久化和消费者确认机制实现消息的可靠传输和最终一致性。消息...
如果我们的项目特别大,对所有的Service都加上事务显得非常麻烦。我们可以使用AOP来实现全局事务。例如: ```java @Aspect @Configuration public class TransactionAdviceConfig { private static final String ...
还可以使用Spring Data JPA或Hibernate,它们提供了ORM功能,简化数据库操作,同时也能进行缓存管理和事务控制。 7. **数据库设计优化**:遵循数据库设计范式,避免数据冗余和异常。通过数据库规范化减少数据更新...
9. **何时不会使用索引**:全表扫描时,如使用了NOT IN, NOT EXISTS, OR条件且未优化,或者使用了函数操作索引字段,可能导致索引失效。 10. **Mybatis动态代理的实现**:Mybatis使用JDK动态代理或CGLIB动态代理,...
对于Spring整合Hibernate的情况,确保@Transactional注解的使用正确。 总结,Hibernate配置错误主要集中在SessionFactory创建、实体类配置、数据库连接、属性映射、懒加载、HQL查询和事务管理等方面。解决这些问题...
6. **索引失效情况**:索引失效可能出现在索引列上有计算操作、使用了不兼容的函数、全表扫描等情况。例如,索引列上进行计算会迫使数据库放弃索引,改为全表扫描。 7. **解决索引失效**:避免在索引列上进行计算,...
Spring的AOP(面向切面编程)允许程序员定义“横切关注点”,如日志、事务管理等,然后将这些关注点与业务逻辑分离。它的实现基于动态代理,可以是JDK动态代理或CGLIB。 2. **HashMap底层数据结构**: HashMap...
12. **缓存问题及解决方案**:缓存穿透、缓存击穿和缓存雪崩分别对应无数据请求、热点数据过期和大量并发请求导致缓存失效,可以通过布隆过滤器、热点数据预加载和限流策略等解决。 13. **LRU(Least Recently Used...
- Spring 使用 AOP 和声明式事务管理。 - 支持多种事务管理器,如 JTA、JDBC、Hibernate 等。 7. **Spring容器启动流程** - 加载配置文件。 - 创建 BeanFactory。 - 注册后处理器。 - 初始化 Bean。 8. **...
5. 异步类需使用 @Component 注解,不然将导致 Spring 无法扫描到异步类。 6. Spring Boot 框架必须在启动类中增加 @EnableAsync 注解。 7. 异步方法不要和事务注解同时存在。 第二种方式:使用 CompletableFuture ...
- 数据库连接创建和释放频繁可能导致系统资源浪费。 - SQL语句硬编码在代码中,不易维护。 - PreparedStatement中设置参数可能存在硬编码问题。 - 结果集解析存在硬编码问题。 ##### 1.2 MyBatis介绍 - **背景...