2017-07-12 24 views
1

私はJavaコードを使用してCloud SQL(Mysql)に接続しようとしています。Java SocketFactoryライブラリを使用してCloud SQLに接続できません

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create socket factory 'com.google.cloud.sql.mysql.SocketFactory' due to underlying exception: 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) 
     at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) 
     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) 
     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.lang.ClassNotFoundException: com.google.cloud.sql.mysql.SocketFactory 

ここに私のコードです - -

package utils 
import java.sql.DriverManager 
import java.sql.Connection 
import scala.collection.mutable.ListBuffer 
import entity.AnalyticFieldEntity 
import compute.driver.AnalyticTools 
import entity.ErrorHandlingEntity 

object ScalaDbConnect { 

    def getAnalyticBatchMap(toolId : Int, paramMap: Map[String, String]): Map[String, Int] = { 
    val methodName = "getAnalyticBatchMap" 
    val errorMode = paramMap.get("mode")+"("+paramMap.get("analyticSource")+")" 

    val dbTuple = DbPropertiesReader.getDbProperties() 


     val databaseName = dbTuple._3 
     val instanceConnectionName = dbTuple._4 
     val username= dbTuple._1 
     val password= dbTuple._2 


    var connection: Connection = null 
    val analyticMap = collection.mutable.Map.empty[String, Int] 
    try { 
     //[START doc-example] 
     val jdbcUrl = String.format(
     "jdbc:mysql://google/%s?cloudSqlInstance=%s&" 
      + "socketFactory=com.google.cloud.sql.mysql.SocketFactory", databaseName, instanceConnectionName); 

     println(jdbcUrl); 
     //Class.forName("com.mysql.jdbc.GoogleDriver"); 
     val connection = DriverManager.getConnection(jdbcUrl, username, password); 
     println(connection); 

    //[END doc-example] 

     try 
     { 

     val statement = connection.createStatement() 
     val resultSet = statement.executeQuery("SELECT omnitureColumnHeader.columnHeaderId, case when analyticFieldMap.isTag = 1 then concat(\"tag_\",analyticFieldMap.entityField) else " + 
     "analyticFieldMap.entityField end as entityField FROM omnitureColumnHeader INNER JOIN analyticFieldMap ON " + 
     "analyticFieldMap.analyticFieldBatch=omnitureColumnHeader.columnHeaderValue where analyticFieldMap.toolId = " + toolId); 

     System.out.println("resultSet: 2" + statement); 
     System.out.println("statement: 2" + resultSet); 


     while (resultSet.next()) { 

        System.out.println("inside the content loop: 2"); 
      analyticMap += resultSet.getString("entityField") -> resultSet.getInt("columnHeaderId") 


      } 


     System.out.println("analyticMap: 2" + analyticMap); 
    } 
     catch 
     { 
     case _: Throwable => println("Got some other kind of exception") 
     } 


    } catch { 
     case e: Exception => 
       val errorHandlingEntity = new ErrorHandlingEntity() 
        errorHandlingEntity.Mode=errorMode 
        errorHandlingEntity.Tool=paramMap.get("tool").toString() 
        errorHandlingEntity.Message="DB Connection Issue" 
        errorHandlingEntity.Trace=e.printStackTrace().toString() 
        errorHandlingEntity.Source = "Spark" 
        errorHandlingEntity.YarnAppId=paramMap.get("appID").toString() 
        errorHandlingEntity.MethodName=methodName 
        errorHandlingEntity.ReThrow = true 
        errorHandlingEntity.CurrentException=e 

        ErrorHandlingFramework.HandleException(errorHandlingEntity) 
    } 
    connection.close() 

    analyticMap.toMap 

    } 
} 

私は私のpom.xmlここ

<dependency> 
    <groupId>com.google.cloud.sql</groupId> 
    <artifactId>mysql-socket-factory</artifactId> 
    <version>1.0.3</version> 
</dependency> 

に以下の内容を追加しているが、完全なPOMがある私は以下のエラーを取得しています。 XML - https://pastebin.com/jvxSBZMX

スカラーコードを使用してGoogle Cloud SQLに接続しようとしていますが、 e JAVA API(S)。 私が直面している問題は、接続の正しいクラスにアクセスできないことを示しています。

ご協力いただければ幸いです。

解決策を楽しみにしています。

ありがとう、

+1

GitHubの問題で説明したように、アセンブリプラグインの設定方法を示すpom.xmlファイルのスニペットを含めてください。 jarファイルが正しくパッケージ化されておらず、特にこのライブラリに関連していない可能性が高いという一般的な問題のように見えます。 – Vadim

+0

こんにちは、ここで私のPOM.XMLを見つけてください - https://pastebin.com/jvxSBZMX私はJARを開いてチェックしました。私は相対クラスを見つけることができます。 –

+0

pomファイルが正しく表示されます。 pomファイルが正しいように見えるので、スパークがロード/実行する方法に問題がある可能性があります。私はスパークに慣れていないので、私はそこでは助けることができません。 – Vadim

答えて

0

Googleのクラウドがmaven Buildをどのように実行するかに問題があります。

ビルドからクラスを読み取ることができないので、拡張子が-JARSのJARファイルを渡しました。

これは私の問題を解決します。

関連する問題