これは、ドライバーがそのポートでその IP への接続を開こうとしたが、そのポートでリッスンしている人がいなかったため、誰も応答しなかったため、「接続がタイムアウトしました」というメッセージが表示されたことを意味します。
Arunn P Johnyが提案したように、コマンドラインを開いて実行すると
telnet localhost 4545
そしてそれはこのように応答します
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
これは、誰も聞いていないことを意味します。たとえば、そのポートでソケット (データベース接続) を開こうとすると、接続タイムアウト例外が発生します。(ポート 4545 が選択されたのは、コンピューターでリッスンしているものがないためです)
それが何か他のもので応答する場合
telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
これは、ポートが開いていて、例外がスローされないことを意味します。(私のコンピューターの 3306 でリッスンしている MySQL があります)。
ほとんどの場合、データベース接続文字列(参照についてはこちらを参照) の IP とポートが間違っています。たとえば、データベースがリッスンしていないポートに設定されています。
この回答とHTTPエラー408リクエストタイムアウトの説明を参照してください(同じエラーです)。
編集:
私は最初に間違った答えを出しました (EJP が指摘したように)。接続の確立中に両方のエラーが TCP レベルで発生します。
Connection refused
指定されたポートでリッスンしている人がいないことを意味します
Connection timeout
接続を確立できなかったか、または EJP で述べられているように、接続試行がタイムアウトしたことを意味します。
Java に次の行があるとします。最終的に JDBC ドライバーは、ある時点でこれを (次のように) 実行します。
Socket s = new Socket(IP,PORT);
この行が実行される前に、(TCP) 接続は閉じられます。この行が実行され、例外がスローされなかった後、接続が確立されます (コンストラクターの apidoc に記載されているとおり)。この行が実行されている間、これが実際に発生します ( TCP スリーウェイ ハンドシェイクと呼ばれます)。

考えられる 2 つの状況を確認してみましょう。
まず、IP に到達可能であるとしましょう (たとえばping IP
、コマンド ラインからコンソールへの応答時間の出力が開始されます) が、ポートでリッスンしているプロセスはありません。スリーウェイ ハンドシェイクは引き出されたときに発生しますが、接続が確立されるとすぐに、サーバーはそのポートでリッスンしているプロセスを見つけられず、すぐに接続のクローズを開始しConnection refused
ます。スローされます。
これは、この例外の唯一の可能な結果です。
ここで、IP に到達できないと仮定しましょう。クライアントは接続要求を送信しますが、接続許可を受け取ることはありません。一定時間 ( timeout ) が経過すると、Connection timeout
がスローされます。次のコードを検討してください。
String reachableIP = "127.0.0.1";
String unreachableIP = "10.192.0.1";
int connTimeout = 1000;
long duration = 0;
try {
duration = System.currentTimeMillis();
new Socket().connect(new InetSocketAddress(unreachableIP, 3306), connTimeout);
}
catch (Exception e) {
duration = System.currentTimeMillis() - duration;
System.out.println("connect attempt duration measured in ms:" + duration);
System.out.println(e.getMessage());
}
出力:
connect attempt duration measured in ms:1009
connect timed out
これはconnect メソッドの apidoc にも記載されています。そのため、宛先 IP に到達できない場合、この例外がスローされます。ただし、ネットワーク上のコンピュータに到達できない理由は数多くあります。最初に頭に浮かぶのは、ホストがオフになっていること、または EJP のコメントを言い換えることです。
バックログ キューがいっぱいになったり、ネットワーク接続の問題が原因でこの例外が発生したりするなど、さまざまな原因が考えられます。