1. 程式人生 > 其它 >java.lang.IllegalArgumentException: interface com.mysql.jdbc.JDBC4MySQLConnection is not visible from class loader

java.lang.IllegalArgumentException: interface com.mysql.jdbc.JDBC4MySQLConnection is not visible from class loader

Exception in thread "main" java.lang.ExceptionInInitializerError
at szq.main.hbasetohive.HBaseReadTest.main(HBaseReadTest.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:894)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.IllegalArgumentException: interface com.mysql.jdbc.JDBC4MySQLConnection is not visible from class loader

這個錯誤是連線mysql時候出現的
主要問題: 在這裡: conn.getClass().getInterfaces() 底下連線程式碼已經改正了正確方式
/**
* 獲取資料庫連線
*/
public Connection getConnection() throws SQLException {
if(connPool.size() > 0){
//從集合中獲取一個連線
final Connection conn = connPool.removeFirst();
//返回Connection的代理物件
//這是錯誤的方式,獲取介面的問題 conn.getClass().getInterfaces()
// (Connection) Proxy.newProxyInstance(ConnPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler() {
//正確的方式 採用new Class[]{com.mysql.jdbc.Connection.class}的方式
return (Connection) Proxy.newProxyInstance(ConnPool.class.getClassLoader(), new Class[]{com.mysql.jdbc.Connection.class}, new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(!"close".equals(method.getName())){
return method.invoke(conn, args);
}else{
connPool.add(conn);
System.out.println("池中連線數為 " + connPool.size());
return null;
}
}
});
}else{
throw new RuntimeException("資料庫繁忙,稍後再試");
}
}