JDBC4 ड्राइवरों में एक फ़ाइल शामिल होती है:
META-INF/services/java.sql.Driver
जार में जो JVM के साथ ड्राइवर कार्यान्वयन को पंजीकृत करने के लिए ServiceProvider तंत्र का उपयोग करता है (java.util.ServiceLoader
) इसीलिए Class.forName अब आवश्यक नहीं है।
मेरा अनुमान है कि यह एक क्लास लोडर मुद्दा है। ServiceLoader javadoc उल्लेख करता है कि:
मैं आपके ड्राइवर को tomcat\lib . में डालने का प्रयास करूंगा आपकी वेब ऐप निर्देशिका के बजाय निर्देशिका यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है (अलग वर्ग लोडर?)।
यदि आप एक विचार के माध्यम से अपना वेब ऐप लॉन्च करते हैं और ब्रेकपॉइंट सेट करते हैं, तो ब्रेकपॉइंट पर पहुंचने के बाद, आप निष्पादित करने के लिए "मूल्यांकन अभिव्यक्ति" सुविधा का उपयोग कर सकते हैं:ServiceLoader.load(Driver.class) . यह आपको एक ServiceLoader देगा कक्षा जिसे आप देख सकते हैं कि कौन से ड्राइवर पंजीकृत हैं। आप जाँच सकते हैं कि क्या mysql ड्राइवर वहाँ है, सूची में कहाँ है, आदि, जो यहाँ के व्यवहार का पता लगाने में मदद कर सकता है।