Memahami properti batas waktu di driver JDBC

Unduh driver JDBC

Pengaturan waktu habis di driver JDBC dapat digunakan untuk memprioritaskan respons aplikasi. Secara bawaan, sebagian besar batas waktu pada driver memprioritaskan penantian hasil untuk memastikan konsistensi data. Pastikan Anda memilih batas waktu yang sesuai dengan kebutuhan aplikasi Anda.

Untuk koneksi awal, loginTimeout digunakan:

  • loginTimeout adalah jumlah detik yang ditunggu driver untuk membangun koneksi ke server. Jika batas waktu ini terlewati, driver mengembalikan kesalahan dan tidak membuka koneksi. Nilai nol mengatur timeout ke timeout sistem default, yaitu 30 detik pada driver JDBC 11.2 dan versi yang lebih baru. Pada driver JDBC 10.2 dan versi sebelumnya, timeout default adalah 15 detik. Setiap nilai bukan nol mengatur jumlah detik yang ditunggu driver sebelum timeout koneksi yang gagal. Jika Anda terus-menerus kesulitan menghubungkan driver JDBC, Anda mungkin perlu meningkatkan timeout ini menjadi 90 atau bahkan 120 detik. loginTimeout juga membatasi percobaan ulang koneksi driver, bukan hanya satu kali percobaan koneksi, yang penting saat Anda terhubung ke database Azure SQL Database serverless yang dijeda secara otomatis. Untuk informasi lebih lanjut, lihat Menyambung ke basis data serverless yang dijeda otomatis.

Setelah koneksi dibuat, queryTimeout, cancelQueryTimeout, dan lockTimeout digunakan selama eksekusi pernyataan. socketTimeout digunakan untuk komunikasi driver apa pun dengan server.

  • queryTimeout adalah waktu, dalam detik, yang akan ditunggu driver setelah mengirim perintah eksekusi ke server untuk menerima balasan dari server yang berisi data. Jika waktu ini terlampaui, perintah dibatalkan. Melebihi batas waktu ini tidak menutup koneksi. Nilai defaultnya adalah -1, yang berarti batas waktu tak terbatas.
  • cancelQueryTimeout adalah waktu, dalam detik, driver menunggu pengakuan pembatalan queryTimeout dari server, sebelum menghentikan/menutup koneksi secara paksa. Artinya, driver menunggu selama total cancelQueryTimeout plus queryTimeout detik sebelum koneksi ditutup. Mengatur batas waktu ini ke nilai bukan nol memastikan aplikasi dapat tetap responsif jika ada kegagalan jaringan atau komunikasi dengan server, ketika kueri telah kehabisan waktu. Nilai default untuk properti ini adalah -1, yang merupakan waktu tunggu tak terbatas.
  • lockTimeout adalah lama waktu yang harus ditunggu hingga kunci dilepaskan, jika ada kunci yang memblokir eksekusi pernyataan. Melebihi batas waktu ini tidak mengakibatkan koneksi tertutup. Nilai default untuk properti ini adalah -1, yang merupakan waktu tunggu tak terbatas.
  • socketTimeout berlaku untuk semua komunikasi soket dengan server. Jika server menghentikan komunikasi dengan driver, baik dengan tidak mengakui atau membalas data, driver menunggu nilai socketTimeout sebelum menutup koneksi. Mengatur batas waktu ini ke nilai bukan nol memastikan aplikasi dapat tetap responsif jika ada kegagalan jaringan atau komunikasi dengan server. Nilai defaultnya adalah 0, yang berarti batas waktu tak terbatas. Pastikan socketTimeout lebih besar daripada queryTimeout menghindari pengecualian batas waktu soket selama jendela queryTimeout . Demikian pula, pastikan socketTimeout lebih besar daripada cancelQueryTimeout untuk menghindari pengecualian batas waktu soket selama jendela cancelQueryTimeout .

Nilai batas waktu yang wajar untuk aplikasi Anda bergantung pada prioritas aplikasi. Mengatur nilai yang lebih rendah untuk batas waktu memprioritaskan respons aplikasi daripada konsistensi data. Ketika batas waktu tercapai, aplikasi perlu memutuskan tindakan terbaik. Keputusan tersebut didasarkan pada tindakan database yang sedang dilakukan. Misalnya, untuk sebuah SELECT pernyataan, keputusannya bisa melaporkan kesalahan kepada pengguna, atau bisa juga menghubungkan kembali dan mencoba ulang. Untuk INSERTUPDATE pernyataan, keputusan itu mungkin berbeda.

Untuk aplikasi responsif, loginTimeout dan queryTimeout harus diatur ke nilai yang relatif rendah. Demikian pula, cancelQueryTimeout juga harus diatur ke nilai rendah untuk memastikan driver tidak menunggu terlalu lama bagi server untuk mengakui pembatalan kueri, ketika queryTimeout terlampaui. Akhirnya, socketTimeout harus diatur untuk mencegah driver menunggu terlalu lama dalam situasi ketika koneksi ke server terputus (gangguan jaringan, server mengalami crash, dll.).

Ringkasan properti

Properti Deskripsi Bawaan Hasil koneksi
loginTimeout Jumlah detik yang harus ditunggu driver sebelum koneksi yang gagal dinyatakan batas waktu. 30 detik [11.2+],
jika tidak 15 detik
Koneksi tertutup
queryTimeout Jumlah detik untuk menunggu sebelum membatalkan kueri. -1 [Batas waktu tak terbatas] Buka koneksi
cancelQueryTimeout Jumlah detik untuk menunggu pengakuan pembatalan QueryTimeout. -1 [Batas waktu tak terbatas] Koneksi tertutup
lockTimeout Jumlah milidetik untuk menunggu sebelum database mengembalikan kesalahan waktu habis kunci. -1 [Batas waktu tak terbatas] Buka koneksi
socketTimeout Jumlah milidetik untuk menunggu operasi baca atau tulis pada soket. Nol [Batas waktu tak terbatas] Koneksi tertutup