2016-10-17 4 views
0

MySQLに接続する単純なJDBCアプリケーション(SpringまたはHibernateを使用しない)があります。本番環境では、MySQL接続はSSLを使用しますが、開発モードではSSLを使用しません。開発モードでは、データベースのURLに"&useSSL=false"を追加して、"サーバーのID確認なしでSSL接続を確立することは推奨されていません"からログファイルがいっぱいになるのを防ぎます。Java、JDBC、C3P0を使用してMySQL SSL警告を取り除く

ここでC3P0を使用してデータベース接続プールを追加します。 DriverManager.getConnectionから接続する代わりに、POOL.getConnection()と呼んでC3P0から接続します。

C3P0をセットアップするコードは非常に単純です:

POOL = new ComboPooledDataSource(); 
POOL.setDriverClass("com.mysql.cj.jdbc.Driver"); 
POOL.setJdbcUrl(DB_URL); 
POOL.setUser(USER); 
POOL.setPassword(PASSWORD); 

問題は、これが動作しないということです。 DB_URL文字列に"&useSSL=false"が含まれている場合は、POOL.getConnection()がハングします。私はDB_URLから"&useSSL=false"を削除しましたが、すべてがうまくいきます。ただし、今はMySQL SSL警告が出ています。

C3P0を正しく設定してMySQL SSL警告を受け取らないように助言する人はいますか?

+0

古い状況で同じドライバを使用していますか? c3p0は 'DriverManager.getConnection'も呼び出します。そうすれば、他の人もうまくいくはずです。古いコードの投稿も検討してください。 –

+0

マーク - どちらの場合も、ドライバは同じです( "com.mysql.cj.jdbc.Driver")。 –

答えて

0

JDBC接続では、アクティブであることを確認する必要がある警告を静かに収集します。ほとんどのアプリケーションは決してそれらをチェックしません。 c3p0はそうです。 Connectionが再びチェックインされるたびに、c3p0はプール内でConnectionを再び使用可能にする前にConnectionの警告を確認、ログ、および消去します。

警告のロギングが面倒な場合は、ロギングライブラリをフィルタリングするように設定してください。すべての警告はINFOでcom.mchange.v2.c3p0.SQLWarningsというロガーに記録されます。 com.mchange.v2.c3p0.SQLWarningsをログに記録しないように、またはINFOよりも重大度の高いレベルにフィルタリングするために、使用しているログライブラリを設定してください。

SQLWarningsを参照してください。

+0

これは、 "POOL.getConnection()がハングする"という問題の説明と完全に一致しません_ –

+1

ポスターが接続パラメータ '&useSSL = false'を提供している場合にのみ、DBMSがサポートしていないように見えます。彼がSSLを使用している場合、すなわち、 '&useSSL = false'を省略すると、彼はConnectionsを取得するのに成功しますが、SSL接続が確認不可能なアイデンティティであるという警告を受け取ります。明らかに、検証可能な証明書を使用してSSLを設定することが最善の方法なので、安全で確認されたIDがあります。しかし、ポスターが中間者攻撃を心配しておらず、警告を消してほしいだけなら、ログに記録しておくと効果があります。 –

関連する問題