DataSourceClosedException_ dataSource already closed

devtools/2024/12/26 0:15:29/

修改了项目中kafka相关配置,准备上线,控制台一直报错:
在这里插入图片描述
一直不停的在刷数据库连接池已关闭???

只改了kafka相关的配置,为什么数据库连接池一直在报错?即使kafka配置写错了,kafkaConsumer不能被注入为Springbean那服务也应该直接启动失败,程序终止,而不是一直在刷error

遇事不决先把控制台的日志翻到最顶,仔细查看第一个报错的日志:

在这里插入图片描述

这里已经提示的很明显了,key.deserializer没有默认值,于是kafkaConsumerbean创建失败

 Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myConsumer' defined in file [D:\source_code\...Consumer.class]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [....Consumer]: Constructor threw exception; nested exception is org.apache.kafka.common.config.ConfigException: Missing required configuration "key.deserializer" which has no default value.

然后服务启动失败:
[外链图片转存中...(img-5olxhgeN-1734884049485)]

服务启动失败的时候,首先就closedataSource,这也就解释了为什么后面一直报错: dataSource already closed,因为服务启动失败了数据连接池关闭了,但是为什么控制台一直在刷?停不下来?

后来搜索了下相关资料:

在标准的Java应用程序中,如果主线程(通常是执行main方法的那个线程)结束执行,但是还有其他非守护(non-daemon)线程在运行,JVM将不会退出,在Spring容器关闭或者服务启动失败的情况下,如果JVM没有完全退出,那么之前已经启动的线程池不会自动销毁。线程池中的线程会继续运行直到它们完成当前任务,或者直到JVM被明确地告知要关闭。如果没有显式地关闭线程池,这些线程可能会继续尝试执行,即使它们依赖的资源(比如数据库连接池)已经被释放。
在正常的重启过程中,应用程序的JVM(Java虚拟机)实例将被关闭。当JVM退出时,它会终止运行在其中的所有线程,包括那些可能仍在执行的线程池中的线程。这意味着,即使线程池没有被显式关闭,JVM的关闭也将确保所有线程最终终止。 

意思是:即使我们bean注入失败了,程序启动失败了,但是因为在程序启动的时候在程序中开启了非守护线程,且一直在运行,在Spring程序关闭的时候没有做正确的关闭处理,例如:线程池资源释放shutDown等,那么这些被开启的线程就会一直运行,JVM因为这些非守护线程在执行也不会退出。

在这个项目中确实在Spring程序启动时,开启了一个线程池去一直循环修改数据库表数据,不会停下,于是在程序启动失败的时候数据库连接池关闭了,但是一直在报错: dataSource already closed。后面实验确实如此,代码如下:

@Configuration
public class TestConfiguration {public TestConfiguration() {new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("会一直循环");}}}).start();}@Beanpublic void test1() {int a = 1 / 0;}}

http://www.ppmy.cn/devtools/145102.html

相关文章

CentOS HTTPS自签证书访问失败问题的排查与解决全流程

sudo cp harbor.crt /usr/local/share/ca-certificates/sudo yum install -y ca-certificatessudo update-ca-trust force-enablesudo update-ca-trust extract 但是访问 https://172.16.20.20 仍然报错 * About to connect() to 172.16.20.20 port 443 (#0) * Trying 172.16.2…

3D造型软件solvespace在windows下的编译

3D造型软件solvespace在windows下的编译 在逛开源社区的时候发现了几款开源CAD建模软件,一直囿于没有合适的建模软件,虽然了解了很多的模拟分析软件,却不能使之成为整体的解决方案,从而无法产生价值。opencascad之流虽然可行&…

【国产NI替代】基于国产FPGA+兆易创新GD32F450的全国产16振动+2转速(24bits)高精度终端采集板卡

16振动2转速(24bits)高精度终端采集板卡 采用AG16KF256国产FPGA兆易创新GD32F450 国产ARM的硬件架构,虽然比T3处理器的运算 能力弱,但是具备成本更低,代码更易维护 的特点。 内置算法可以完成特征值的计算以及请求…

第五节:GLM-4v-9b模型model加载源码解读(模型相关参数方法解读)

文章目录 前言一、GLM-4v-9b模型model加载源码解读1、GLM-4v-9b模型model加载主函数源码2、GLM-4v-9b模型model加载源码源码解读3、GLM-4v-9b自定义模型类源码解读 二、基于GLM-4v-9b模型获取模型输入参数等内容源码解读(from_pretrained-->huggingface)1、from_pretrained函…

WebRTC服务质量(08)- 重传机制(05) RTX机制

一、前言: RTX协议(Retransmission,即重传协议)是 WebRTC 中用于处理丢包恢复的一部分。由于网络通信中的丢包不可避免,WebRTC RTP协议栈支持多种丢包恢复机制,其中之一便是通过RTX协议实现的重传机制。 …

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏,总之今天遇到了一开Unity,过一阵就蓝屏的情况,报Watch Dog Timeout。 【分析】 通过任务管理器查看,发现Unity占用率100%,再观察Unity内部,每次右下角出现一个Global I…

Java基础 | 数据库的命名规范

数据库的命名规范 1. 基本原则2. 命名规范详解2.1 命名禁止项2.2 命名规范3. 通用字段规范4. 特殊表命名建议 1. 基本原则 统一性:全库采用一致的命名规范简洁性:在表达清晰的前提下尽量简短规范性:遵循数据库标准规范可读性:命名…

uniapp input的触发事件

在 uniapp 中&#xff0c;input 组件常用的触发事件有以下几种&#xff1a; input 触发条件&#xff1a;用户输入时触发。 用法&#xff1a;绑定输入事件&#xff0c;常用于获取输入框的值。 示例&#xff1a; <input type"text" input"handleInput" /&…