异常:no transaction is in progress

简介: 异常:no transaction is in progress

转载请注明出处:

  在使用  @Scheduled 注解创建了一个定时任务,并通过定时任务不断向mysql写入数据,写入数据的方式是通过 jpa 的方式,在代码运行的过程中出现错误:no transaction is in progress。

  以下是异常堆栈:

 

  原因分析:

    该异常表明没有事务正在进行,导致无法访问数据持久化上下文。这个问题通常是由于事务管理器未正确配置或未正确应用到代码中引起的。

  解决方案:

    尝试了将@Scheduled和调用的service进行拆分,或是添加@Trasactional注解,以及修改定时任务的触发方式,一直没有生效,但是通过写controller,通过controller调用service中的方法,是可以调用成功,且数据写入成功。

    目的要通过定时任务触发进行写入数据时,一直事务不生效。

    最终解决方式,使用手动创建事务和提交事务,这时通过定时任务写数据便可以写成功。

    手动事务的关键代码:

@Service
public class MyService {
    
    @Autowired
    private EntityManagerFactory entityManagerFactory;
    
    @Transactional  // 添加事务注解
    public void saveData(Object data) {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        
        try {
            transaction.begin();  // 开始事务
            
            entityManager.persist(data);  // 执行持久化操作
            
            transaction.commit();  // 提交事务
        } catch (Exception e) {
            if (transaction != null && transaction.isActive()) {
                transaction.rollback();  // 回滚事务
            }
            throw e;
        } finally {
            entityManager.close();  // 关闭实体管理器
        }
    }
}

 

标签: 异常

相关文章
|
消息中间件 Kafka 容器
【kafka异常】使用Spring-kafka遇到的坑
【kafka异常】使用Spring-kafka遇到的坑
3878 0
|
3月前
|
存储 算法 Java
【JVM虚拟机】JVM内存结构(JDK8+):方法区、堆、虚拟机栈、本地方法栈、程序计数器,各区域作用与OOM场景(附《思维导图》+《面试高频考点清单》)
本文是面向Java开发者与面试者的JDK8+ JVM内存结构权威指南,系统梳理程序计数器、虚拟机栈、本地方法栈、堆(含年轻代/老年代/TLAB)、元空间五大运行时数据区,涵盖线程私有/共享特性、OOM场景、核心参数及高频面试题,图文结合、深度实用。
|
人工智能 Java 数据库连接
Spring事务失效场景
本文深入探讨了Spring框架中事务管理可能失效的几种常见场景及解决方案,包括事务方法访问级别不当、方法内部自调用、错误的异常处理、事务管理器或数据源配置错误、数据库不支持事务以及不合理的事务传播行为或隔离级别。通过合理配置和正确使用`@Transactional`注解,开发者可以有效避免这些问题,确保应用的数据一致性和完整性。
1199 10
|
SQL 数据库
DBeaver执行sql文件
本文介绍了DBeaver这款支持多种数据库的通用数据库管理工具和SQL客户端,它具备查看数据库结构、执行SQL查询和脚本、浏览和导出数据等功能。
4783 1
DBeaver执行sql文件
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
14196 4
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
Oracle Java 关系型数据库
使用DataGrip链接达梦数据库
使用DataGrip链接达梦数据库
3220 0