异常: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();  // 关闭实体管理器
        }
    }
}

 

标签: 异常

相关文章
|
人工智能 Java 数据库连接
Spring事务失效场景
本文深入探讨了Spring框架中事务管理可能失效的几种常见场景及解决方案,包括事务方法访问级别不当、方法内部自调用、错误的异常处理、事务管理器或数据源配置错误、数据库不支持事务以及不合理的事务传播行为或隔离级别。通过合理配置和正确使用`@Transactional`注解,开发者可以有效避免这些问题,确保应用的数据一致性和完整性。
1136 10
|
缓存 NoSQL Redis
关于redis使用@Cacheable注解redis中不生效问题完美解决
关于redis使用@Cacheable注解redis中不生效问题完美解决
1289 104
|
SQL 存储 算法
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2640 0
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
|
Java 关系型数据库 MySQL
SpringBoot手动提交事务
SpringBoot手动提交事务
1821 0
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
36538 1
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
SQL 数据库
DBeaver执行sql文件
本文介绍了DBeaver这款支持多种数据库的通用数据库管理工具和SQL客户端,它具备查看数据库结构、执行SQL查询和脚本、浏览和导出数据等功能。
4598 1
DBeaver执行sql文件
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显

热门文章

最新文章