Home Database Mysql Tutorial How to handle MySQL connection timeout in Java program?

How to handle MySQL connection timeout in Java program?

Jul 01, 2023 am 10:42 AM
mysql java Connection timed out

How to handle MySQL connection timeout in Java program?

When we develop Java-based applications, we often need to interact with the database. MySQL is a commonly used relational database that uses the TCP/IP protocol to establish a connection with Java programs. However, due to network instability or other reasons, MySQL connection timeout may occur. This article will introduce how to deal with MySQL connection timeout issues in Java programs.

First of all, we need to understand the reason why the MySQL connection times out. In order to protect resources and the network, the MySQL server will set a connection timeout. When a MySQL connection does not have any interactive operations for a period of time, the server will actively disconnect to release resources. This connection timeout can be set in the MySQL server configuration file, and the default is 8 hours.

The following methods can be used to handle MySQL connection timeout in Java programs:

  1. Set the connection timeout: When using JDBC to connect to MySQL, you can set the setLoginTimeout method of the Connection object to set the connection timeout. This method accepts an integer parameter in seconds indicating the maximum time to wait for a connection to be established. If the connection is not successful within the specified time, a SQLException is thrown. The connection timeout can be set according to specific needs. A common setting is 30 seconds.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String username = "root";
        String password = "password";

        try {
            DriverManager.setLoginTimeout(30);
            Connection connection = DriverManager.getConnection(url, username, password);
            // TODO: 连接成功后的操作
        } catch (SQLException e) {
            System.out.println("连接超时");
        }
    }
}
Copy after login
  1. Use connection pooling: Connection pooling is a technology for managing database connections that can improve the performance and reliability of database connections. The connection pool will initialize a certain number of connections when the program starts and put these connections into the connection pool. When you need to connect to MySQL, obtain an available connection object from the connection pool, and then put the connection object back into the connection pool after use. The connection pool automatically manages the opening and closing of connections, as well as connection validity checks. If the connection times out, the connection pool will automatically re-create a connection to ensure the availability of the connection.

Commonly used Java connection pools include Apache Commons DBCP, C3P0 and HikariCP. These connection pool frameworks all provide connection timeout configuration options, and you can handle the MySQL connection timeout problem by setting an appropriate connection timeout.

  1. Detect connection status: In addition to the above two methods, we can also handle MySQL connection timeout by manually detecting the connection status. You can execute a piece of code regularly in the program to detect the status of the connection. If the connection has timed out, you can close it and reopen a new one. This method requires manually writing code to detect the connection status and reconnect, which is relatively cumbersome.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String username = "root";
        String password = "password";

        // 连接超时时间
        int timeout = 30; // 单位:秒

        while (true) {
            try {
                Connection connection = DriverManager.getConnection(url, username, password);
                // 检测连接是否可用
                if (!connection.isValid(timeout)) {
                    // 关闭无效连接
                    connection.close();
                    // 创建新连接
                    connection = DriverManager.getConnection(url, username, password);
                }
                // TODO: 连接成功后的操作

                // 休眠一段时间后重新检测连接
                Thread.sleep(3000); // 单位:毫秒
            } catch (SQLException e) {
                System.out.println("MySQL连接错误:" + e.getMessage());
            } catch (InterruptedException e) {
                System.out.println("线程休眠错误:" + e.getMessage());
            }
        }
    }
}
Copy after login

In the above code, we detect the validity of the connection by calling the isValid method of the Connection object. If the connection is invalid, close the connection and create a new connection by calling the DriverManager.getConnection method again.

To sum up, by setting the connection timeout, using a connection pool or manually detecting the connection status, the MySQL connection timeout problem can be dealt with more effectively. Depending on the specific needs and scenarios, we can choose a suitable method to handle connection timeouts. At the same time, in order to ensure program performance and reliability, the connection timeout should be set reasonably and connection exceptions should be handled promptly when the connection times out. This can effectively avoid program exceptions and data loss caused by connection timeouts.

The above is the detailed content of How to handle MySQL connection timeout in Java program?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

Hot Article

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Square Root in Java Square Root in Java Aug 30, 2024 pm 04:26 PM

Square Root in Java

Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

Perfect Number in Java

Random Number Generator in Java Random Number Generator in Java Aug 30, 2024 pm 04:27 PM

Random Number Generator in Java

Armstrong Number in Java Armstrong Number in Java Aug 30, 2024 pm 04:26 PM

Armstrong Number in Java

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Weka in Java

How to fix mysql_native_password not loaded errors on MySQL 8.4 How to fix mysql_native_password not loaded errors on MySQL 8.4 Dec 09, 2024 am 11:42 AM

How to fix mysql_native_password not loaded errors on MySQL 8.4

Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

Java Spring Interview Questions

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Break or return from Java 8 stream forEach?

See all articles