Saya memiliki aplikasi web JPA Spring Boot kecil yang bagus. Ini diterapkan di Amazon Beanstalk dan menggunakan Amazon RDS untuk menyimpan data. Namun itu tidak sering digunakan dan karena itu gagal setelah beberapa saat dengan pengecualian semacam ini:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Paket terakhir yang berhasil diterima dari server adalah 79.870.633 milidetik yang lalu.
Paket terakhir yang berhasil dikirim ke server adalah 79.870.634 milidetik yang lalu. lebih panjang dari nilai 'wait_timeout' yang dikonfigurasi server. Anda harus mempertimbangkan untuk kedaluwarsa dan / atau menguji validitas koneksi sebelum digunakan dalam aplikasi Anda, meningkatkan nilai konfigurasi server untuk waktu tunggu klien, atau menggunakan properti koneksi Connector / J 'autoReconnect = true' untuk menghindari masalah ini.
Saya tidak yakin bagaimana mengkonfigurasi pengaturan ini dan tidak dapat menemukan informasi tentangnya di http://spring.io (meskipun situs yang sangat bagus). Apa sajakah ide atau petunjuk untuk informasi?
sumber
DataSource
dan memverifikasi propertinya. stackoverflow.com/a/36586630/148844 Spring Boot tidak akan mengkonfigurasi secara otomatisDataSource
jika Anda memiliki@Beans
fileDataSource
. docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/…Jawaban:
Saya berasumsi bahwa boot sedang mengkonfigurasi
DataSource
untuk Anda. Dalam hal ini, dan karena Anda menggunakan MySQL, Anda dapat menambahkan yang berikut ini keapplication.properties
hingga 1.3 AndaSeperti djxak dicatat dalam komentar, 1.4 + mendefinisikan ruang nama khusus untuk empat koneksi kolam Musim Semi Boot mendukung:
tomcat
,hikari
,dbcp
,dbcp2
(dbcp
sudah ditinggalkan sebagai 1,5). Anda perlu memeriksa kumpulan koneksi mana yang Anda gunakan dan memeriksa apakah fitur itu didukung. Contoh di atas adalah untuk kucing jantan jadi Anda harus menuliskannya sebagai berikut di 1.4+:Perhatikan bahwa penggunaan
autoReconnect
yang tidak dianjurkan :sumber
spring.datasource.testOnBorrow
danspring.datasource.test-on-borrow
akan bekerja dengan baik. Lihat dokumentasi untuk lebih jelasnya.SELECT 1
menjamin bahwa koneksi telah diuji sebelum diserahkan ke aplikasi. Dengan menggunakantestOnBorrow = true
, objek akan divalidasi sebelum dipinjam dari pool. Jika objek gagal divalidasi, itu akan dihapus dari kumpulan, dan akan mencoba untuk meminjam yang lain. CATATAN - agar nilai benar memiliki efek, parameter validationQuery harus disetel ke string bukan nol.tomcat
,hikari
,dbcp
,dbcp2
. Jadi, misalnya, untuktomcat-jdbc
connection-pool, propertinya harus:spring.datasource.tomcat.testOnBorrow=true
danspring.datasource.tomcat.validationQuery=SELECT 1
.If you define your own DataSource bean, auto-configuration will not occur.
Saya mengikuti panduan untuk OAuth2 dan telah@Bean(name = "OAuth") public DataSource secondaryDataSource()...
serta tidak dikonfigurasi otomatis maupun digunakantestOnBorrow
.Saran di atas tidak berhasil untuk saya. Apa yang benar-benar berhasil adalah penyertaan baris berikut di application.properties
Anda bisa menemukan penjelasannya di sini
sumber
Pengaturan
spring.datasource.tomcat.testOnBorrow=true
di application.properties tidak berfungsi.Pengaturan secara terprogram seperti di bawah ini berfungsi tanpa masalah.
sumber
Saya baru saja pindah ke Spring Boot 1.4 dan menemukan properti ini diganti namanya:
sumber
jawaban whoami adalah yang benar. Menggunakan properti seperti yang disarankan saya tidak dapat membuat ini berfungsi (menggunakan Spring Boot 1.5.3.RELEASE)
Saya menambahkan jawaban saya karena ini adalah kelas konfigurasi lengkap sehingga dapat membantu seseorang menggunakan Spring Boot:
sumber
Saya memiliki masalah serupa. Spring 4 dan Tomcat 8. Saya memecahkan masalah dengan konfigurasi Spring
Saya telah menguji. Ini bekerja dengan baik! Dua baris ini melakukan segalanya untuk terhubung kembali ke database:
sumber
Jika ada yang menggunakan Sumber Data khusus
Properti akan terlihat seperti berikut. Perhatikan @ConfigurationProperties dengan awalan. Awalan adalah segalanya sebelum nama properti sebenarnya
Referensi untuk Versi Musim Semi 1.4.4.RELEASE
sumber
Seperti yang telah ditunjukkan oleh beberapa orang, spring-boot 1.4+, memiliki ruang nama khusus untuk empat kumpulan koneksi. Secara default, hikaricp digunakan di spring-boot 2+. Jadi, Anda harus menentukan SQL di sini. Standarnya adalah
SELECT 1
. Inilah yang Anda perlukan untuk DB2 misalnya:spring.datasource.hikari.connection-test-query=SELECT current date FROM sysibm.sysdummy1
Peringatan : Jika driver Anda mendukung JDBC4, kami sangat menyarankan untuk tidak menyetel properti ini. Ini untuk driver "warisan" yang tidak mendukung API JDBC4 Connection.isValid (). Ini adalah kueri yang akan dieksekusi sebelum koneksi diberikan kepada Anda dari pool untuk memvalidasi bahwa koneksi ke database masih hidup. Sekali lagi, coba jalankan pool tanpa properti ini, HikariCP akan mencatat kesalahan jika driver Anda tidak sesuai dengan JDBC4 untuk memberi tahu Anda. Default: tidak ada
sumber
Bagi mereka yang ingin melakukannya dari YAML dengan berbagai sumber data, ada posting blog yang bagus tentangnya: https://springframework.guru/how-to-configure-multiple-data-sources-in-a-spring-boot -aplikasi/
Pada dasarnya disebutkan bahwa Anda berdua perlu mengonfigurasi properti sumber data dan sumber data seperti ini:
Jangan lupa untuk menghapus
@Primary
dari sumber data lain.sumber