解决Springboot不能自动提交数据库连接问题

 更新时间:2024年09月29日 08:42:56   作者:谢月  
在使用SSM框架开发时,若在同一Service内部方法间互相调用,直接使用this关键字会导致事务管理失效,从而引发如数据库连接不足等问题,原因是通过this调用不会经过Spring的代理,因此不会自动进行事务处理

一、问题描述

之前一直用的公司框架,所以SSM框架不是特别熟悉,然后新项目采用SSM狂架搭建的。

在其中一个需求中,我在service层类的方法内部调用了该类的其他方法:

并且是采用this调用该类的其他方法。

如下:

就是这波操作使得功能一上线就直接抛出异常,数据库连接不够。

后经过排查采用this调用的方法不会走spring框架自行提交数据库连接,必须手动提交数据库连接。

因此就会使得当访问量达到一定量就会抛出异常。

二、修改方式一(交由spring提交事务)

只需要将用this调用的方式都改如下即可:将实例交由spring管理,即可自动提交。

三、修改方式二(手动提交事务)

@Resource(name="transactionManager")
private DataSourceTransactionManager transactionManager;

DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition();
//开启新事物
transDefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus transStatus = transactionManager.getTransaction(transDefinition);
try {
    //TODO
    transactionManager.commit(transStatus);
} catch (Exception e) {
    transactionManager.rollback(transStatus);
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 迪杰斯特拉算法实现查找最短距离的实现

    Java 迪杰斯特拉算法实现查找最短距离的实现

    这篇文章主要介绍了Java 迪杰斯特拉算法实现查找最短距离的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • SpringBoot Maven 项目 pom 中的 plugin 插件用法小结

    SpringBoot Maven 项目 pom 中的 plugin&n

    本文详细介绍了Spring Boot Maven项目打包成jar文件时使用的spring-boot-maven-plugin插件,深入探讨了插件的配置元素,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-01-01
  • java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析

    以下是对java连接mysql数据库的具体详细步骤进行了分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • springboot项目整合mybatis并配置mybatis中间件的实现

    springboot项目整合mybatis并配置mybatis中间件的实现

    这篇文章主要介绍了springboot项目整合mybatis并配置mybatis中间件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java多线程编程:线程的原理和使用安全

    Java多线程编程:线程的原理和使用安全

    文章主要介绍了线程的基本概念、线程和进程的区别、线程的创建方法、线程的常见方法与属性、线程的安全问题等,线程是程序执行流的最小单位,可以并发执行并共享数据,线程的生命周期状态包括新建、就绪、运行、阻塞、死亡等
    2026-05-05
  • java实现小球碰撞功能

    java实现小球碰撞功能

    这篇文章主要为大家详细介绍了java实现小球碰撞功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • Mybatis注解实现多数据源读写分离详解

    Mybatis注解实现多数据源读写分离详解

    这篇文章主要给大家介绍了关于Mybatis注解实现多数据源读写分离的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • IDEA在创建包时如何把包分开实现自动分层(方法详解)

    IDEA在创建包时如何把包分开实现自动分层(方法详解)

    这篇文章主要介绍了IDEA在创建包时如何把包分开实现自动分层,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Spring WebFlux 与 WebClient 使用指南及最佳实践

    Spring WebFlux 与 WebClient 使用指南及最佳实践

    WebClient是Spring WebFlux模块提供的非阻塞、响应式HTTP客户端,基于Project Reactor实现,适用于高并发场景spring webclient,本文给大家介绍Spring WebFlux与WebClient使用指南及最佳实践,感兴趣的朋友一起看看吧
    2025-07-07
  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    这篇文章主要介绍了Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法,结合实例形式分析了Java使用递归与循环两种方式实现未知维度集合的笛卡尔积相关概念、原理与操作技巧,需要的朋友可以参考下
    2017-12-12

最新评论