Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PreparedStatement wird nie ablaufen, selbst wenn es explizit gesetzt ist

Rufen Sie Connection.setNetworkTimeout() auf in einem Versuch-endlich .

private final static Executor immediateExecutor = Runnable::run;

try ( Connection connection = pool.getConnection() ) {
   int timeout = connection.getNetworkTimeout();
   connection.setNetworkTimeout(immediateExecutor, TimeUnit.SECONDS.toMillis(5));
   ...
   try (PreparedStatement...) {
      ...
   }
   finally {
      connection.setNetworkTimeout(timeout);
   }
}
finally {
   ...
}

Sie leiden unter unbestätigtem TCP-Verkehr, der eine Verbindung unterbrechen kann, wenn kein Netzwerk-Timeout eingestellt ist.