ログはlogger.warn( "Start:preparedStatement.executeQuery()")で停止します。無期限にハングアップします。ログに例外はスローされません。クエリーは情報列の下のSHOW FULL PROCESSLISTに表示されません。これはクエリーが実行されていないことを意味します。私はコマンドラインでクエリを実行することができ、すべての行を戻すのに1秒未満かかりません。 IN_USE <> 0のオープンテーブルを表示すると空のセットが返され、テーブルはロックされません。 JDK 1.8、MySQL 1.6、InnoDBを使用する。 *編集:これはAWS上で実行されており、ハングする前にCPU使用率が大幅に上昇していることに気付きました。ExecuteQuery不明な理由でハングします。消耗した共通の解決策
public void setup(StringBuilder sql, String[] args, RowMapper<I> rowMapper) throws SQLException{
this.rowMapper = rowMapper;
//Create prepared statement
connection.setAutoCommit(false);
logger.warn("Start: Connection.preparedStatement");
preparedStatement = connection.prepareStatement(sql.toString(),ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
logger.warn("End: Connection.preparedStatement");
preparedStatement.setFetchSize(fetchSize);
//Setting SQL arguments
int i = 1;
for(String var: args){
preparedStatement.setString(i++, var);
}
logger.warn("Start: preparedStatement.executeQuery()");
resultSet = preparedStatement.executeQuery();
logger.warn("End: preparedStatement.executeQuery()");
}
コードが正常に表示されているので、デバッグモードで起動し、すべてのスレッドをフリーズして、どこに保持されているかを確認することをお勧めします。多分それはあなたにある方向を与えるでしょう。 –
未ログインの例外?あなたのログが表示され、MySQLの終わりでクエリが実行されておらず、 "done"ログが表示されない場合、スレッドはそれらのログラインの間でスレッドを停止しました。スレッドダンプ? –
アプリケーションをローカルでデバッグすることは良い考えでした – Jimifredjr