Trình điều khiển JDBC4 bao gồm một tệp:
META-INF/services/java.sql.Driver
trong jar sử dụng cơ chế ServiceProvider để đăng ký triển khai Trình điều khiển với JVM (xem javadocs cho java.util.ServiceLoader
). Đó là lý do tại sao Class.forName
không còn cần thiết.
Tôi đoán rằng đây là một vấn đề của trình tải lớp. ServiceLoader
javadoc đề cập rằng:
Tôi sẽ thử đặt trình điều khiển của bạn vào tomcat\lib
chứ không phải thư mục ứng dụng web của bạn để xem điều đó có tạo ra sự khác biệt không (trình tải lớp khác nhau?).
Nếu bạn khởi chạy ứng dụng web của mình thông qua một Ide và đặt một điểm ngắt, thì khi bạn đạt đến điểm ngắt, bạn có thể sử dụng tính năng "đánh giá biểu thức" để thực thi:ServiceLoader.load(Driver.class)
. Điều này sẽ cung cấp cho bạn một ServiceLoader
lớp mà bạn có thể xem qua để xem Trình điều khiển nào đã được đăng ký. Bạn có thể kiểm tra xem trình điều khiển mysql có ở đó không, nó nằm ở đâu trong danh sách, v.v., điều này có thể giúp tìm ra hành vi ở đây.