2016-06-22 7 views
2

Google App EngineでJavaを使用して数日間問題を抱えています。JDBCとApp EngineでNullPointerExceptionが発生する

クラウドSqlインスタンスへの接続を要求しようとすると何度も(時間の約50%)接続がnull値を返し、クラウドSqlクエリを呼び出すときに(NullPointerExceptionメッセージが表示されます。 prepareCall(stored_proc))。

私は、最新のApp EngineのJava SDKは、プロジェクトサービスでは、このJavaのバックエンドを消費Pythonで構築された他のサービスと共有しています。

特定の時間が経過するとインスタンスがクラッシュする可能性がありますか(私はこの時点でテストしていますので、デフォルトのスケーリングを使用しています)。

<application>app</application> 
<module>mod</module> 
<version>1</version> 
<threadsafe>true</threadsafe> 

<use-google-connector-j>true</use-google-connector-j> 

私は他の記事からいくつかの提案を試みたが、まったく成功して:

 Class.forName("com.mysql.jdbc.GoogleDriver"); 
     url = "jdbc:google:mysql://project:instance/database?user=root"; 
     log.info(url); 
     return DriverManager.getConnection(url); 

これは私の設定ファイルの一部です:

この

はnullを返しコードです。

事前に感謝の意を表します。

答えて

0

私は解答のために良いアイデアをくれましたが、クリスピナスが言及したものではないので、これを答えとして追加します。

コードが深くなり、一部のメソッドがデータベース接続を終了していないことがわかりました。私は彼らのすべてがそれをやっていると仮定していましたが、それぞれの方法を見て、私は間違っていることが分かりました。

したがって、明らかに聞こえるが、チェック接続は適切に閉じられている(または、Chrispinusの説明どおりに管理されている)。

1

Google Cloud SQLとAppエンジンを使用しているときに同じ問題が発生しました。

私は自分の接続プールを管理することで問題を解決しました。私はあなたがそれぞれの要求に対して新しい接続を要求し、スレッドの完了時にそれを閉じるときにそれを認識しました。他の要求はnullを戻し、NullPointExceptionになります。

私は以下のことをすることにしました。それは今の2年間、私のために働いています。

  • 接続を開いて、多数の接続を持つ静的クラスに保持します。
  • データベースへの接続を検出するたびに、私が最初に使用可能な接続であるかどうかを確認します。
  • クエリを使用して接続を強制終了しました。つまり、接続ドロップのサックのために別の追加接続をリクエストする必要がありました。
+0

あなたの答えは非常にありがたく、私は確かにそれを試して、何が起こるかを見ることができます、あなたに知らせるでしょう。ちょっと別の質問:アプリに接続制限がありますか?どうやってそれに対処しましたか?私はよく覚えている場合App Engineは、インスタンスごとに12の同時接続の最大数を可能にします。 –

関連する問題