@
目錄
業務描述:最近遇到業務很復雜的方法,有通過Spring的@Transactional注解開啟事務的,不過在ie11出現bug,console日志打印已經update成功的SQL,方法很長,執行成功后,發現數據沒有修改,這個和console日志打印不符合,問題比較難排查,然后通過網上資料個自己嘗試fix bug,不過具體原因沒有想清,瀏覽器本身就和事務處理沒關系,為什么在不同瀏覽器會不同效果,所以本博客記錄一下,方便以后自己回顧
通過網上資料和自己嘗試,初步判斷是事務沒提交導致的,網上資料搜索到Mybatis SqlSession默認是不自動提交事務的,所以嘗試開啟Mybatis SqlSession自動提交事務
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;
/**
* 獲取Spring上下文
*/
@Service
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanName) {
return (T) ctx.getBean(beanName);
}
public static <T> T getBean(Class<T> clazz) {
return ctx.getBean(clazz);
}
/**
* 設置Mybatis自動提交事務
* @Author mazq
* @Date 2020/05/29 13:51
* @return org.apache.ibatis.session.SqlSession
*/
public static SqlSession getSqlSession(){
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory)ctx.getBean("sqlSessionFactory");
return sqlSessionFactory.openSession(true);
}
}
然后在對應dao類后面加上代碼:
// Mybatis自動提交事務
SqlSession mybatisSqlSession = ApplicationContextHolder.getSqlSession();
mybatisSqlSession.commit();