EasyExcel中无法使用Spring事务的解决办法
2023-02-18 16:43:34 时间
1.原因
EasyExcel使用了监听器,没有被Spring进行管理,所以无法使用Spring的事务注解进行事务的相关操作
2.解决办法
通过构造器注入事务处理
//事务管理器
private PlatformTransactionManager platformTransactionManager;
//事务定义
private TransactionDefinition transactionDefinition;
//
private TransactionStatus transactionStatus = null;
public XXXListener(PlatformTransactionManager platformTransactionManager, TransactionDefinition transactionDefinition){
this.platformTransactionManager = platformTransactionManager;
this.transactionDefinition = transactionDefinition;
//开启事务
this.transactionStatus = platformTransactionManager.getTransaction(this.transactionDefinition);
}
@Override
public void invoke(TopicExcel topicExcel, AnalysisContext analysisContext) {
// 判断事务是否关闭,如果事务已经关闭不执行业务代码
if (transactionStatus.isCompleted()) {
return;
}
//TODO 业务代码
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//判断事务是否已被处理,未处理则进行提交事务
if (!transactionStatus.isCompleted()) {
//提交事务
platformTransactionManager.commit(transactionStatus);
}
}
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
//回滚事务
platformTransactionManager.rollback(transactionStatus);
throw new Exception(exception.getMessage());
}
相关文章
- 年近而立,Java何去何从?
- Java安全之Webshell免杀
- Java代码审计之某博客
- Java代码审计之不安全的Java代码
- java代码审计的点
- 简单的java代码审计
- FL Studio21完整版安装包下载FL2023最新版本
- 与(&)、或(|)、异或(^) – 位运算详解
- 基于Wechaty+Docker打造一个ChatGPT机器人
- WordPress主题制作:开始前的准备
- WordPress主题制作(一):主题文件结构
- Docker Portainer – Docker目前最好的可视化管理工具
- classpath和classpath*的区别及classpath到底是什么
- WordPress主题制作(二):模板和模板文件
- Spring AOP详解
- WordPress主题制作(三):牛刀小试
- spring boot 2.x 整合mybaits及分页插件
- spring boot 启动的时候required a bean of type 'XXX' that could not be
- 向maven中央仓库提交jar
- 图解设计模式:动动手玩转迭代器模式