Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mengendalikan tamat masa sambungan MySQL dalam program Java?

Bagaimana untuk mengendalikan tamat masa sambungan MySQL dalam program Java?

王林
王林asal
2023-07-01 10:42:112658semak imbas

Bagaimana untuk mengendalikan tamat masa sambungan MySQL dalam program Java?

Apabila kami membangunkan aplikasi berasaskan Java, kami selalunya perlu berinteraksi dengan pangkalan data. MySQL ialah pangkalan data hubungan yang biasa digunakan yang menggunakan protokol TCP/IP untuk mewujudkan sambungan dengan program Java. Walau bagaimanapun, disebabkan ketidakstabilan rangkaian atau sebab lain, tamat masa sambungan MySQL mungkin berlaku. Artikel ini akan memperkenalkan cara menangani isu tamat masa sambungan MySQL dalam program Java.

Pertama, kita perlu memahami punca sambungan MySQL tamat masa. Untuk melindungi sumber dan rangkaian, pelayan MySQL akan menetapkan tamat masa sambungan. Apabila sambungan MySQL tidak mempunyai sebarang operasi interaktif untuk satu tempoh masa, pelayan akan secara aktif memutuskan sambungan untuk mengeluarkan sumber. Tamat masa sambungan ini boleh ditetapkan dalam fail konfigurasi pelayan MySQL, dan lalai ialah 8 jam.

Kaedah berikut boleh digunakan untuk mengendalikan tamat masa sambungan MySQL dalam program Java:

  1. Tetapkan tamat masa sambungan: Apabila menggunakan JDBC untuk menyambung ke MySQL, anda boleh menetapkan tamat masa sambungan dengan menetapkan kaedah setLoginTimeout bagi objek Sambungan. Kaedah ini menerima parameter integer dalam saat yang mewakili masa maksimum untuk menunggu sambungan diwujudkan. Jika sambungan tidak berjaya dalam masa yang ditetapkan, SQLException dilemparkan. Tamat masa sambungan boleh ditetapkan mengikut keperluan tertentu Tetapan biasa ialah 30 saat.
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("连接超时");
        }
    }
}
  1. Gunakan pengumpulan sambungan: Pengumpulan sambungan ialah teknologi untuk menguruskan sambungan pangkalan data yang boleh meningkatkan prestasi dan kebolehpercayaan sambungan pangkalan data. Kumpulan sambungan akan memulakan bilangan sambungan tertentu apabila program bermula dan meletakkan sambungan ini ke dalam kumpulan sambungan. Apabila anda perlu menyambung ke MySQL, dapatkan objek sambungan yang tersedia daripada kolam sambungan, dan kemudian letakkan semula objek sambungan ke dalam kolam sambungan selepas digunakan. Kolam sambungan secara automatik menguruskan pembukaan dan penutupan sambungan, serta semakan kesahihan sambungan. Jika sambungan tamat, kumpulan sambungan akan membuat semula sambungan secara automatik untuk memastikan ketersediaan sambungan.

Kolam sambungan Java yang biasa digunakan termasuk Apache Commons DBCP, C3P0 dan HikariCP, dsb. Rangka kerja kumpulan sambungan ini semuanya menyediakan pilihan konfigurasi tamat masa sambungan, yang boleh menangani masalah tamat masa sambungan MySQL dengan menetapkan tempoh tamat masa sambungan yang sesuai.

  1. Kesan status sambungan: Sebagai tambahan kepada dua kaedah di atas, kami juga boleh mengendalikan tamat masa sambungan MySQL dengan mengesan status sambungan secara manual. Anda boleh melaksanakan sekeping kod dengan kerap dalam program untuk mengesan status sambungan. Jika sambungan telah tamat masa, anda boleh menutupnya dan membuka semula sambungan baharu. Kaedah ini memerlukan penulisan kod manual untuk mengesan status sambungan dan menyambung semula, yang agak menyusahkan.
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());
            }
        }
    }
}

Dalam kod di atas, kami mengesan kesahihan sambungan dengan memanggil kaedah isValid objek Sambungan. Jika sambungan tidak sah, tutup sambungan dan buat sambungan baharu dengan memanggil kaedah DriverManager.getConnection sekali lagi.

Ringkasnya, dengan menetapkan tamat masa sambungan, menggunakan kumpulan sambungan atau mengesan status sambungan secara manual, masalah tamat masa sambungan MySQL boleh ditangani dengan lebih berkesan. Bergantung pada keperluan dan senario khusus, kami boleh memilih kaedah yang sesuai untuk mengendalikan tamat masa sambungan. Pada masa yang sama, untuk memastikan prestasi dan kebolehpercayaan program, tamat masa sambungan harus ditetapkan dengan munasabah dan pengecualian sambungan harus dikendalikan dengan segera apabila tamat masa sambungan. Ini dengan berkesan boleh mengelakkan pengecualian program dan masalah kehilangan data yang disebabkan oleh tamat masa sambungan.

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan tamat masa sambungan MySQL dalam program Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn