<aop:config> <aop:pointcut id="mmethod" expression="execution(* com.jc.bus.jttsp.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="mmethod" /> </aop:config>
首先检查切点是不是有问题。
@Service注解如果被SpringMVC扫描到那么Service是不存在事务属性。
package com.jc.spring.main; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.FileSystemResource; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; @Configuration @EnableWebMvc @ComponentScan(basePackages={"com.jc.bus.*.web.**"}) public class WebConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewresolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/view/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } @Bean public MultipartResolver multipartResolver() throws IOException{ CommonsMultipartResolver cmr = new CommonsMultipartResolver(); cmr.setUploadTempDir(new FileSystemResource("/tmp/file")); cmr.setMaxUploadSize(1048576); cmr.setMaxInMemorySize(0); return cmr; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(mappingJacksonHttpMessageConverter()); super.configureMessageConverters(converters); } @Bean public JacksonAnnotationIntrospector jacksonAnnotationIntrospector() { return new JacksonAnnotationIntrospector(); } @Bean(name = "objectMapper") public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); mapper.configure(SerializationFeature.INDENT_OUTPUT, false); mapper.setAnnotationIntrospector(jacksonAnnotationIntrospector()); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); return mapper; } @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter(){ RequestMappingHandlerAdapter amga = new RequestMappingHandlerAdapter(); List<HttpMessageConverter<?>> ls = new ArrayList<HttpMessageConverter<?>>(); ls.add(mappingJacksonHttpMessageConverter()); amga.setMessageConverters(ls); return amga; } @Bean public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); messageConverter.setObjectMapper(objectMapper()); return messageConverter; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { // TODO Auto-generated method stub configurer.enable(); } }
如果发现SpringMVC包的确扫描了service,那么自行处理一下,使用Spring扫描service就可以了。
package com.jc.spring.main; import javax.annotation.Resource; import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.ImportResource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import com.jc.spring.extend.SpringContextHolder; @Configuration @ComponentScan(basePackages = { "com.jc.spring.extend.**","com.jc.bus.*.service.**" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) }) @ImportResource(value = { "classpath:/com/jc/spring/main/spring-transaction.xml" }) public class RootConfig { @Resource(name = "dataSource") DataSource dataSource; @Bean(name = "jdbcTemplate") public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(dataSource); } }
相关推荐
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
在"Spring/SpringMVC/MyBatis整合+事务回滚"的主题中,我们将深入探讨如何将这三个框架整合起来,并实现事务的回滚功能。 首先,Spring框架是核心,它提供了依赖注入(DI)和面向切面编程(AOP)的能力,使得代码更...
SQL 事务回滚解决回滚无效的情况 BEGIN TRY END TRY CAHTH
Mybatis本身并不直接支持事务管理,但在Spring环境下,可以通过Spring的TransactionProxyFactoryBean或者AOP代理实现事务控制。SpringBoot自动配置已经帮我们处理了这部分工作,所以我们无需额外编写事务管理代码。 ...
### 关于Spring MyBatis纯注解事务不能提交的问题分析与解决 #### 问题背景 在使用Spring结合MyBatis框架进行开发时,有时会遇到事务管理方面的问题,特别是当项目采用纯注解的方式配置事务时,可能会出现事务无法...
5. **异常处理与事务回滚**:在MyBatis中,如果在事务内发生未捕获的运行时异常,事务会自动回滚。这是基于Java的异常传播机制实现的。开发者也可以通过调用`SqlSession.rollback()`方法强制回滚事务。 6. **...
Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上...说一下环境 Intellij Idea 15 + Maven + Spring 4.25 + Mybatis 3使用注解的方式,进行的事务回滚,欢迎测试。
SUPPORTED(不支持事务,如果有事务则挂起)、NEVER(不允许存在事务,如果有则抛出异常)、NESTED(嵌套事务,如果当前事务存在,则在嵌套事务内执行,否则新建事务)。 4. **Spring的回滚规则**:默认情况下,...
springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) ...
关于事务管理,Spring提供了一种声明式事务管理方式,允许开发者在不直接接触事务API的情况下,通过配置来控制事务的边界。在Spring中,我们可以使用@Transactional注解来标记需要进行事务管理的方法,一旦发生异常...
这是 MyBatis 默认的事务管理方式,当不使用任何外部框架时,MyBatis 将直接使用 JDBC API 来管理事务。在 JdbcTransaction 类中,事务的开始、提交和回滚实际上对应于 `conn.setAutoCommit(false)`、`conn.commit...
6. **异常与事务回滚** 默认情况下,只有在运行时检查异常(RuntimeException及其子类)发生时,Spring才会回滚事务。对于非运行时检查异常,如果需要回滚,需要显式配置或者在catch块中抛出运行时检查异常。 7. *...
在本项目中,“springboot+redis+mybatis事务和引擎模板”是一个综合性的Spring Boot应用,它整合了MyBatis和Redis技术,用于实现高效的数据处理和缓存管理。下面将详细阐述其中涉及的关键知识点: 1. **Spring ...
在企业级Java开发中,"Maven + Spring + MyBatis + MySQL + 事务管理"是一个常见的技术栈组合,它们各自扮演着不同的角色,构建出高效、稳定的后端系统。 **Maven** 是一个项目管理和综合工具,它帮助开发者管理...
MyBatis本身并不提供事务管理,但在Spring环境下,MyBatis的SqlSession会自动被Spring事务管理器控制。当事务开始后,所有的SqlSession操作(如insert、update、delete)都会被包含在这个事务中,直到事务结束。 6...
简单的Spring+MyBastis事务控制代码,包括2个超简单的数据库表,服务代码(同时更新2个表的数据,如果后面的表的处理出错,则事务会回滚),只是简单演示了事务控制功能,其他的没有涉及。测试功能采用JUnit4.
例如,在一个银行系统中,如果用户想要转账,但是在转账过程中出现错误,事务回滚机制可以将数据库回滚到转账前的状态,以避免数据的不一致。 在 SpringBoot 中,我们可以使用注解方式来处理事务回滚。我们可以在...
在Spring框架中,MyBatis作为持久层框架与Spring结合使用时,事务管理是一个至关重要的环节。编码式事务,也称为编程式事务管理,是指在代码中显式地控制事务的开始、提交、回滚等操作。这种方式虽然灵活,但会增加...
Mybatis对事务的处理主要通过SqlSession来实现,开发者可以通过SqlSession来开启、提交或回滚事务。而在实际使用中,往往结合Spring框架来管理事务,即通过SqlSessionTemplate来集成Spring的事务管理。 最后,提及...
spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...