`

MyBatis事务不回滚原因分析

 
阅读更多
<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整合事务回滚

    花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...

    Spring/SpringMVC/MyBatis整合+事务回滚

    在"Spring/SpringMVC/MyBatis整合+事务回滚"的主题中,我们将深入探讨如何将这三个框架整合起来,并实现事务的回滚功能。 首先,Spring框架是核心,它提供了依赖注入(DI)和面向切面编程(AOP)的能力,使得代码更...

    SQL 事务回滚解决 回滚无效的情况

    SQL 事务回滚解决回滚无效的情况 BEGIN TRY END TRY CAHTH

    SpringBoot-Mybatis处理事务

    Mybatis本身并不直接支持事务管理,但在Spring环境下,可以通过Spring的TransactionProxyFactoryBean或者AOP代理实现事务控制。SpringBoot自动配置已经帮我们处理了这部分工作,所以我们无需额外编写事务管理代码。 ...

    关于SpringMyBatis纯注解事务不能提交的问题分析与解决

    ### 关于Spring MyBatis纯注解事务不能提交的问题分析与解决 #### 问题背景 在使用Spring结合MyBatis框架进行开发时,有时会遇到事务管理方面的问题,特别是当项目采用纯注解的方式配置事务时,可能会出现事务无法...

    myBatis系列之七:事务管理

    5. **异常处理与事务回滚**:在MyBatis中,如果在事务内发生未捕获的运行时异常,事务会自动回滚。这是基于Java的异常传播机制实现的。开发者也可以通过调用`SqlSession.rollback()`方法强制回滚事务。 6. **...

    Spring 4 + Mybatis 3 注解事务

    Spring 与 各框架的组各下来,版本就特别的多,针对简单的 使用注解来管理事务的,研究了两天,要不网上...说一下环境 Intellij Idea 15 + Maven + Spring 4.25 + Mybatis 3使用注解的方式,进行的事务回滚,欢迎测试。

    spring与mybatis整合实现事务配置

    SUPPORTED(不支持事务,如果有事务则挂起)、NEVER(不允许存在事务,如果有则抛出异常)、NESTED(嵌套事务,如果当前事务存在,则在嵌套事务内执行,否则新建事务)。 4. **Spring的回滚规则**:默认情况下,...

    springboot mybatis多数据源加事务嵌套

    springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) ...

    spring+mybatis+事务

    关于事务管理,Spring提供了一种声明式事务管理方式,允许开发者在不直接接触事务API的情况下,通过配置来控制事务的边界。在Spring中,我们可以使用@Transactional注解来标记需要进行事务管理的方法,一旦发生异常...

    MyBatis 事务管理解析:颠覆你心中对事务的理解!.docx

    这是 MyBatis 默认的事务管理方式,当不使用任何外部框架时,MyBatis 将直接使用 JDBC API 来管理事务。在 JdbcTransaction 类中,事务的开始、提交和回滚实际上对应于 `conn.setAutoCommit(false)`、`conn.commit...

    springMVC+MYBATIS事务管理

    6. **异常与事务回滚** 默认情况下,只有在运行时检查异常(RuntimeException及其子类)发生时,Spring才会回滚事务。对于非运行时检查异常,如果需要回滚,需要显式配置或者在catch块中抛出运行时检查异常。 7. *...

    springboot+redis+mybatis事务和引擎模板

    在本项目中,“springboot+redis+mybatis事务和引擎模板”是一个综合性的Spring Boot应用,它整合了MyBatis和Redis技术,用于实现高效的数据处理和缓存管理。下面将详细阐述其中涉及的关键知识点: 1. **Spring ...

    Maven + spring + mybatis + mysql + 事务管理

    在企业级Java开发中,"Maven + Spring + MyBatis + MySQL + 事务管理"是一个常见的技术栈组合,它们各自扮演着不同的角色,构建出高效、稳定的后端系统。 **Maven** 是一个项目管理和综合工具,它帮助开发者管理...

    spring+mybatis的声明式事务

    MyBatis本身并不提供事务管理,但在Spring环境下,MyBatis的SqlSession会自动被Spring事务管理器控制。当事务开始后,所有的SqlSession操作(如insert、update、delete)都会被包含在这个事务中,直到事务结束。 6...

    Spring+MyBatis的事务控制

    简单的Spring+MyBastis事务控制代码,包括2个超简单的数据库表,服务代码(同时更新2个表的数据,如果后面的表的处理出错,则事务会回滚),只是简单演示了事务控制功能,其他的没有涉及。测试功能采用JUnit4.

    使用SpringBoot注解方式处理事务回滚实现

    例如,在一个银行系统中,如果用户想要转账,但是在转账过程中出现错误,事务回滚机制可以将数据库回滚到转账前的状态,以避免数据的不一致。 在 SpringBoot 中,我们可以使用注解方式来处理事务回滚。我们可以在...

    spring+mybatis的编码式事务

    在Spring框架中,MyBatis作为持久层框架与Spring结合使用时,事务管理是一个至关重要的环节。编码式事务,也称为编程式事务管理,是指在代码中显式地控制事务的开始、提交、回滚等操作。这种方式虽然灵活,但会增加...

    源码分析专题之Mybatis课程一之源码分析与实现.pdf

    Mybatis对事务的处理主要通过SqlSession来实现,开发者可以通过SqlSession来开启、提交或回滚事务。而在实际使用中,往往结合Spring框架来管理事务,即通过SqlSessionTemplate来集成Spring的事务管理。 最后,提及...

    spring +springboot+mybatis+maven 读写分离及事务管理

    spring +springboot+mybatis+maven 读写分离,数据库采用mysql, 采用springboot 采用项目框架搭建,继承spring 中的AbstractRoutingDataSource,实现 determineCurrentLookupKey 进行数据源的动态切换,采用Spring ...

Global site tag (gtag.js) - Google Analytics