(pertanyaan lama tetapi saya menemukan pesan kesalahan/peringatan yang sama) Apakah Anda menggunakan kumpulan jdbc dengan QueryTimeoutInterceptor
atau hubungi statement.setQueryTimeout(320)
fungsi. Ini memanggil utas mysqljdbc.jar internal untuk membatalkan kueri yang berjalan lama.
Hotdeployment Tomcat tidak mengenalinya sehingga utas dibiarkan berjalan dan menjaga konteks aplikasi web yang mati tetap berada di 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"
/>
Pesan peringatan ini The web application [TI] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it
terjadi bahkan jika pendengar ini diaktifkan di tomcat/conf/server.xml
mengajukan. Saya tidak tahu apakah aplikasi web mati dirilis setelah batas waktu kueri. Saya telah memutuskan untuk tidak menggunakan batas waktu kueri dengan driver jdbc MySQL.
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
classesToInitialize="com.mysql.jdbc.NonRegisteringDriver" />