tentang penjelasan detail tentang masalah kumpulan koneksi antara Tomcat dan MySQL (asli)
, dan akhirnya mendapatkan sesuatu. Pertama-tama, harap diperhatikan: di sini kami membahas secara khusus masalah yang dihadapi pada versi Tomcat 5.5 Mengapa versi ini sangat spesifik, saya akan menjelaskannya sebentar lagi.
Pertanyaan 1: Tidak dapat membuat driver JDBC kelas '' untuk menghubungkan URL 'null'
menjawab:
[Analisis penyebab]
Banyak teman menemukan bahwa kesalahan di atas terjadi saat memanggil kumpulan koneksi setelah mengkonfigurasi $Tomcat/conf/server.xml, $Tomcat/conf/context.xml, atau bahkan WEB-INF/web.xml. Kalau dianalisa penyebab errornya, umumnya karena kita belum mengikat sumber datanya (penyebab error sebenarnya karena setting driverClassName dan urlnya kosong, tapi kita pasti tidak akan lupa untuk mengatur tempat ini, jadi kita harus telah menyelesaikan pengaturan tanpa menghubungkan!). Biasanya ada dua cara untuk mengonfigurasi sumber data (bukan hanya metode pengaturan di $Tomcat/conf/context.xml). Salah satunya adalah dengan menambahkan kode berikut sebelum </GlobalNamingResources> di $Tomcat/conf/server.xml:
Pengaturan metode satu:
<Sumber daya
name="jdbc/test" //Nama sumber data
ketik = "javax.sql.Sumber Data"
driverClassName="com.mysql.jdbc.Driver" //Ini adalah pengaturan driverClassName yang baru saja saya sebutkan
kata sandi = "admin" // Kata sandi basis data
maxIdle="2"
maxTunggu = "5000"
nama pengguna = "root" // Nama pengguna basis data
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL Database, yang merupakan url yang baru saja disebutkan
maxActive="4"/>
Kecuali jika ada komentar, semua parameter digunakan untuk mengatur jumlah koneksi, status idle dan status aktivitas. Jika Anda hanya melakukan percobaan pembelajaran, Anda tidak perlu mengubahnya. Efek dari metode ini setara dengan mengkonfigurasi operasi di antarmuka grafis Tomcat.
Cara lain adalah dengan menambahkan kode berikut ke <Context ...></Context> di $Tomcat/conf/server.xml:
Pengaturan metode dua:
<Nama sumber daya="jdbc/test" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams nama="jdbc/test">
<parameter>
<nama>pabrik</nama>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</nilai>
</parameter>
<parameter>
<nama>nama pengguna</nama>
<nilai>akar</nilai>
</parameter>
<parameter>
<nama>kata sandi</nama>
<nilai>admin</nilai>
</parameter>
<parameter>
<nama>namaKelasPengemudi</nama>
<nilai>com.mysql.jdbc.Driver</nilai>
</parameter>
<parameter>
<nama>url</nama>
<nilai>jdbc:mysql://localhost:3306/test?autoReconnect=true</nilai>
</parameter>
<parameter>
<nama>Ukuran awal</nama>
<nilai>20</nilai>
</parameter>
<parameter>
<nama>maxAktif</nama>
<nilai>30</nilai>
</parameter>
<parameter>
<nama>maxTunggu</nama>
<nilai>10.000</nilai>
</parameter>
</ResourceParams>
Tujuan umum dari pengaturan ini adalah untuk memungkinkan sumber data diimplementasikan dalam direktori pemetaan terpisah, yaitu, biasanya kode ini muncul di <Context docBase="direktori spesifik (seperti D:webappsmyjsp) " path= "Nama akses (seperti /myjsp)" reloadable="true"></Context>, sehingga Anda dapat mengakses file di D:webappsmyjsp dengan mengakses http://localhost:8080/myjsp/ XXX.jsp Halaman jsp kemudian mengambil sumber data atau melakukan operasi lain untuk mengambil sumber data.
Masalahnya adalah, apa pun metodenya, tidak ada yang terhubung! Jika Anda tidak menggunakan ResourceLink, bean atau kacang tidak akan dapat menemukan kode yang Anda tetapkan. Bagaimana Anda bisa menemukan driverClassName dan url? Faktanya, tidak ada satu pun pengaturan parameter yang akan ditemukan!
[Larutan]
Setelah Anda mengetahui alasannya, solusinya akan lebih mudah. Tidak peduli metode mana yang Anda gunakan.
Solusi satu:
Jika Anda ingin mengimplementasikan ResourceLink dalam direktori pemetaan, tambahkan <ResourceLink global="data source name" name="mapped name" type="javax.sql.DataSource" di tengah <Context...></Context> "/>, harap diperhatikan bahwa jika Anda tidak memahami hubungan kode, Anda harus menulisnya erat setelah <Context...>.
Solusi kedua:
Jika Anda ingin menjadikannya global dan dapat digunakan di semua direktori pemetaan, tulis saja di $Tomcat/conf/context.xml dan semuanya akan baik-baik saja.
Umumnya, setiap orang menyetel "nama sumber data" dan "nama yang dipetakan" menjadi sama. Misalnya, saya menyetelnya seperti ini: <ResourceLink global="jdbc/test" name="jdbc/test" type="javax. sql.DataSource" "/>.
Selain itu, perlu dicatat bahwa di Tomcat5.5, jika Anda mengatur metode kedua di atas, meskipun Anda menambahkan ResourceLink, Anda akan menemui masalah tidak berjalan dengan benar.
Pertanyaan 2: javax.naming.NameNotFoundException: Nama XXX tidak terikat dalam Konteks ini
menjawab:
[Analisis penyebab]
Di Tomcat5.5, pengaturan sumber data di <Context...><Context> tidak berfungsi dengan baik. Saya telah membaca postingan yang ditulis oleh orang asing. Dia mengatakan ini karena dalam versi yang lebih tinggi (seharusnya Tomcat dan dbcp), nilai pabrik telah diubah dari org.apache.commons.dbcp.BasicDataSourceFactory menjadi org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory. Tapi saya mencobanya dan tidak menyelesaikan masalah. Dan saya menemukan bahwa versi standar Tomcat5.5 hadir dengan dbcp, yaitu di $Tomcatcommonlib. Saya membaca penjelasan netizen lain, dan dia mengatakan bahwa cara setting yang kedua tidak bisa. Ini menunjukkan bahwa metode pengaturan kedua hanya berlaku untuk versi sebelumnya. Saya tidak tahu bagian mana yang harus diubah pada versi saat ini, tetapi alasan kesalahannya adalah saya ingin mengaturnya bersama-sama, dan server tidak dapat menemukannya. sumber data yang sesuai dengan "nama sumber data".
[Larutan]
Anda dapat mengatasinya jika Anda mengetahui alasannya. Tampaknya ini hanya berfungsi jika sumber data dideklarasikan di <GlobalNamingResources>. Jadi setiap orang dapat mengatur Tomcat5.5 sesuai dengan metode pengaturan pertama (inilah sebabnya saya berbicara tentang Tomcat5.5 secara khusus).
Pertanyaan 3: Tidak dapat memuat kelas driver JDBC 'com.mysql.jdbc.Driver'
menjawab:
[Analisis penyebab]
Tidak hanya untuk mysql, tetapi juga untuk database lain, selama tidak dapat ditemukan, error "Cannot load JDBC driver class" ini akan muncul. Lalu mengapa kelas driver database tidak dapat ditemukan? Bagaimana cara menemukannya? Ini sebenarnya sangat sederhana.
[Larutan]
Cukup salin jdbc ke $Tomcatcommonlib.
Pertanyaan 4: Tidak dapat tersambung, kumpulan habis
[Analisis penyebab]
Ini sangat sederhana. Koneksi tidak dapat dibuat dan kumpulan koneksi meluap. Ini berarti sumber daya koneksi Anda terbuang sia-sia karena Anda tidak mendaur ulangnya tepat waktu.
[Larutan]
Gunakan metode close() dengan cepat dan benar untuk melepaskan ResultSet, Statement, dan Connection. Saya tidak akan membahas pernyataan spesifiknya.
Ringkasan: Jadi, jika Anda ingin menggunakan Tomcat5.5 untuk membuat kumpulan koneksi sumber data, hanya ada tiga langkah.
Pertama: Atur sumber data. Disarankan untuk menggunakan antarmuka operasi grafis. Jika Anda melakukannya secara manual, tambahkan kode berikut sebelum </GlobalNamingResources> di $Tomcat/conf/server.xml:
<Resource
name="jdbc/test" //Nama sumber data
ketik = "javax.sql.Sumber Data"
driverClassName="com.mysql.jdbc.Driver" //Ini adalah pengaturan driverClassName yang baru saja saya sebutkan
kata sandi = "admin" // Kata sandi basis data
maxIdle="2"
maxTunggu = "5000"
nama pengguna = "root" // Nama pengguna basis data
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL Database, yang merupakan url yang baru saja disebutkan
maxActive="4"/>
sesuai keinginan Anda.
Kedua: Siapkan koneksi Sumber Daya. Disarankan untuk menulis <ResourceLink global="nama sumber data" name="nama yang dipetakan" type="javax.sql.DataSource"/> di $Tomcat/conf/context.xml Implementasi direktori ditulis setelah <Context...> di direktori yang perlu dipetakan di $Tomcat/conf/server.xml.
Ketiga: Salin JDBC ke $Tomcatcommonlib.
Selain itu, saya tidak akan menjelaskan secara detail cara memanggil sumber data di sini. Sumber data referensi "); "Sumber data yang direferensikan" dalam pernyataan tersebut hanyalah "nama yang dipetakan", bukan "nama sumber data", jadi saya sarankan Anda menyetel kedua nama tersebut agar sama demi kenyamanan. Dan berikan perhatian khusus untuk melepaskan sumber daya yang menganggur tepat waktu, jika tidak, kumpulan koneksi akan meluap!
Di atas adalah beberapa hasil penelitian saya saat ini, saya yang masih pemula, semoga artikel ini bermanfaat bagi semuanya. Jika Anda memiliki pertanyaan, silakan hubungi saya. Email saya adalah: [email protected] (orang yang suka melihat lampu neon). Artikel ini asli dari neonlight.bokee.com (CSDN_MathMagician) dan tidak dapat direproduksi! 11 Agustus 2006
http://blog.csdn.net/mathmagician/archive/2007/03/01/1518689.aspx