您的位置:首页 > 新闻 > 热点要闻 > 网站建立不安全_45岁至50岁找工作_百度排行榜风云榜小说_免费建网站哪家好

网站建立不安全_45岁至50岁找工作_百度排行榜风云榜小说_免费建网站哪家好

2024/12/27 18:50:16 来源:https://blog.csdn.net/qq_40314469/article/details/144655336  浏览:    关键词:网站建立不安全_45岁至50岁找工作_百度排行榜风云榜小说_免费建网站哪家好
网站建立不安全_45岁至50岁找工作_百度排行榜风云榜小说_免费建网站哪家好

修改了项目中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;}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com