Closed git-yqk closed 10 months ago
无法根据步骤请求 2023-11-10 09:50:38.734 WARN 46214 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported]
无法根据步骤请求 2023-11-10 09:50:38.734 WARN 46214 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver:已解决 [org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“GET”]
请在终端使用 curl http://127.0.0.1:8080/actuator/shutdown -X POST
或使用API测试工具发送POST请求。
连接池为HikariCP-4.0.3,ORM为Mybatis-Plus-3.5.4.1。
@alvinkwok1 look
我周日排查下
@huayanYu @git-yqk 有排查结果了。在使用actuator进行应用关闭的时候,会调用org.apache.catalina.loader.WebappClassLoaderBase的stop方法,该方法将会关闭掉现在所有运行的线程,其中对线程的ClassLoader会做检查, DynamicDataSource的HikariDataSource的加载ClassLoader是基于 WebappClassLoaderBase的子类,因此在关闭过程中会出现告警。 具体代码见: org.apache.catalina.loader.WebappClassLoaderBase#clearReferencesThreads
我对比了SpringBoot的DataSourceConfiguration对HikariCP的创建过程,发现在创建过程中指定了ClassLoader来加载HikariCp来加载对应的DataSource。
总的来说,这个告警问题不影响功能,如果要解决掉这个告警问题需要使用特定加载器完成,可参考DataSourceConfiguration对数据源的加载。
哦,等我研究下.
@huayanYu @git-yqk 有排查结果了。在使用actuator进行应用关闭的时候,会调用org.apache.catalina.loader.WebappClassLoaderBase的stop方法,该方法将会关闭掉现在所有运行的线程,其中对线程的ClassLoader会做检查, DynamicDataSource的HikariDataSource的加载ClassLoader是基于 WebappClassLoaderBase的子类,因此在关闭过程中会出现告警。 具体代码见: org.apache.catalina.loader.WebappClassLoaderBase#clearReferencesThreads
我对比了SpringBoot的DataSourceConfiguration对HikariCP的创建过程,发现在创建过程中指定了ClassLoader来加载HikariCp来加载对应的DataSource。
总的来说,这个告警问题不影响功能,如果要解决掉这个告警问题需要使用特定加载器完成,可参考DataSourceConfiguration对数据源的加载。
@alvinkwok1 我没有找到指定classLoader创建的代码也, 都是 protected static
@huayanYu 抱歉,我的排查过程是错误的,根据你的提示我重新看了一遍代码,有几点错误:
对比了dynamic-datasource和spring创建连接池的区别,dynamic-datasource是立即创建的连接池,这个时候的线程的classLoader是Tomcat的classLoader,而spring的数据源创建并不是立即创建的,而是atacor对应的RMI线程进行连接检测的时候创建的,此时的线程的classLoader不是tomcat的classLoader。
能力有限,只能排查到这儿了, 后续我看了下普通的bean的加载并未使用tomcat的classLoader,并不清楚 为什么会有这样的差异,不知道是不是因为dynamic-datasource的注入方式导致的
Enviroment
JDK Version(required): OracleJDK_1.8.201
SpringBoot Version(required): 2.7.17
dynamic-datasource-spring-boot-starter Version(required): 4.2.0
Describe what happened
使用 http://127.0.0.1:8080/actuator/shutdown 关闭Springboot时会出现警告
Expected Result: 正常关闭项目
Actual Result: 项目可以关闭,但会出现线程警告
If there is an exception,or aop invalid,please attach the exception trace:
Steps to reproduce
Step 1 配置多个数据源
Step 2 引入actuator
Step 3 配置actuator
Step4 启动项目后使用 http://127.0.0.1:8080/actuator/shutdown 关闭项目