(câu hỏi cũ nhưng tôi gặp phải thông báo lỗi / cảnh báo tương tự) Bạn có sử dụng nhóm jdbc với QueryTimeoutInterceptor
không hoặc gọi statement.setQueryTimeout(320)
hàm số. Nó gọi một chuỗi mysqljdbc.jar nội bộ để hủy các truy vấn đang chạy dài.
Tomcat hotdeployment không nhận ra nó nên luồng bị bỏ lại và giữ một ngữ cảnh ứng dụng web đã chết vẫn còn trong RAM.
<Resource name="jdbc/BSManager" auth="Container"
type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
initialSize="2" maxActive="100" maxIdle="10" maxWait="30000"
username="myuser" password="mypwd"
driverClassName="com.mysql.jdbc.Driver"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.QueryTimeoutInterceptor(queryTimeout=320)"
url="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8"
validationQuery="SELECT 1" removeAbandoned="true" removeAbandonedTimeout="7200"
testOnBorrow="true" maxAge="1800000"
/>
Thông báo cảnh báo này The web application [TI] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it
xảy ra ngay cả khi trình nghe này được kích hoạt trong tomcat/conf/server.xml
tập tin. Tôi không biết liệu ứng dụng web đã chết có được phát hành sau khi hết thời gian chờ truy vấn hay không. Tôi đã quyết định không sử dụng thời gian chờ truy vấn với trình điều khiển MySQL jdbc.
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
classesToInitialize="com.mysql.jdbc.NonRegisteringDriver" />