欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot Test 多線程報錯的根本原因(dataSource already closed)

 更新時間:2022年06月18日 08:48:59   作者:、楽.  
在使用Springboot test進行相關測試的時候,發(fā)現(xiàn)開啟線程操作數(shù)據(jù)庫的時候異常,這篇文章主要介紹了SpringBoot Test 多線程報錯:dataSource already closed的根本原因及解決方法,需要的朋友可以參考下

背景

使用Springboot test進行相關測試的時候,發(fā)現(xiàn)開啟線程操作數(shù)據(jù)庫的時候異常。

排查方法

將線程移除,采用并行的方式,操作數(shù)據(jù)庫正常。

根本原因

  • SpringBoot Test 主線程退出,導致Spring 容器關閉。
  • Spring容器關閉,導致DruidDataSource 關閉
  • 此時用戶線程去訪問已關閉的數(shù)據(jù)源,導致報錯。

解決方法

提供一個全局的線程池,然后使用線程池開啟線程操作,然后添加監(jiān)聽器,監(jiān)聽線程池里面是否有未完成的任務,如果有則不關閉容器。

@Component
public class EventListener implements ApplicationListener<ApplicationEvent> {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextClosedEvent) {
            LoggerClient.info("容器即將關閉");
            //線程池工具類
            ThreadPoolUtil threadPoolUtil = new ThreadPoolUtil();
            while (threadPoolUtil.getExecutor().isTerminated()) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
?public class ThreadPoolUtil {
    private static final ExecutorService executor = Executors.newFixedThreadPool(20);
    public ThreadPoolUtil() {
    }
    public ExecutorService getExecutor() {
        return executor;
    }
    public static void submitRunnable(Runnable runnable) {
        executor.submit(runnable);
    }
    public static <V> Future submitCallable(Callable<V> callable) {
        Future<V> submit = executor.submit(callable);
        return submit;
    }
}

到此這篇關于SpringBoot Test 多線程報錯:dataSource already closed的文章就介紹到這了,更多相關SpringBoot Test 多線程報錯內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA泛型的繼承和實現(xiàn)、擦除原理解析

    JAVA泛型的繼承和實現(xiàn)、擦除原理解析

    這篇文章主要介紹了JAVA泛型的繼承和實現(xiàn)、擦除原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • MyBatis映射器mapper快速入門教程

    MyBatis映射器mapper快速入門教程

    使用mapper接口的方式,不用寫接口實現(xiàn)類,直接完成數(shù)據(jù)庫操作,簡單方便。使用mapper接口,采用的是面向接口編程的思想,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • 關于Java中避免空指針的方法

    關于Java中避免空指針的方法

    這篇文章主要介紹了關于Java中避免空指針的方法,空指針異常就是我們在對空對象進行的任何操作都會報空指針異常,所謂的指針,就是java中的對象的引用,比如String?s;這個就是指針,需要的朋友可以參考下
    2023-07-07
  • 詳解SpringIOC容器中bean的作用范圍和生命周期

    詳解SpringIOC容器中bean的作用范圍和生命周期

    這篇文章主要介紹了SpringIOC容器中bean的作用范圍和生命周期,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Spring中注解方式的異步請求

    Spring中注解方式的異步請求

    今天給大家整理了Spring中注解方式的異步請求的知識點,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 解決IDEA中多模塊下Mybatis逆向工程不生成相應文件的情況

    解決IDEA中多模塊下Mybatis逆向工程不生成相應文件的情況

    這篇文章主要介紹了解決IDEA中多模塊下Mybatis逆向工程不生成相應文件的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • springboot默認文件緩存(easy-captcha?驗證碼)

    springboot默認文件緩存(easy-captcha?驗證碼)

    這篇文章主要介紹了springboot的文件緩存(easy-captcha?驗證碼),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 初學者Android studio安裝圖文詳解

    初學者Android studio安裝圖文詳解

    本文給大家分享android studio 安裝圖文詳解包括下載安裝及遇到的問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • 基于Spring Data的AuditorAware審計功能的示例代碼

    基于Spring Data的AuditorAware審計功能的示例代碼

    這篇文章主要介紹了基于Spring Data的AuditorAware審計功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot項目中使用AOP的方法

    SpringBoot項目中使用AOP的方法

    本篇文章主要介紹了SpringBoot項目中使用AOP的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論