Java 7で問題なく動作していますが、Java 8へのアップグレードに問題があるアプリケーションがあります。データベース接続が問題であるようです。Atomikos、Java 8、複数のデータベース
ケース: アプリケーションは200を超えるデータベースにアクセスします。または、技術的には、1つのデータベース・インストールで200の異なるスキーマ。 Atomikosをデータソースとして使用しています。 Java 7でアプリケーションを起動すると、データ・ソースに対して順次の反復処理が行われる可能性があります。これは、最大プール・サイズを5に設定しているためです。時間はかかりますが、問題はありません。
Java 8で動作させようとすると、すべてのことを平行して実行しようとしていると思います。このような起動時にアプリケーションがクラッシュ:
05:21:39.611 INFO [メイン] osojLocalContainerEntityManagerFactoryBean - 'database.np' 05永続ユニットの建物JPA 容器のEntityManagerFactory:21:41.389 INFO [メイン] osojLocalContainerEntityManagerFactoryBean - 永続ユニットのためのビルディングJPA 容器のEntityManagerFactory 'database.np_000000000_0000' 05:21:41.796 INFO [メイン] osojLocalContainerEntityManagerFactoryBean - 永続ユニット 「database.np_000000001_0000用建物JPA 容器のEntityManagerFactory '05:22:11.890 WARN [メイン] c.atomikos.jdbc.AtomikosSQLException - 接続プールが枯渇しました。 DataSourceBeanで' maxPoolSize 'および/または' borrowConnectionTimeout 'を増やしてみてください。接続プールが枯渇しました。 DataSourceBeanで 'maxPoolSize'および/または 'borrowConnectionTimeout'を増やしてみてください。 05:22:41.998 ERROR [メイン] ohtool.hbm2ddl.SchemaValidator - HHH000319:データベース メタデータcom.atomikos.jdbc.AtomikosSQLException取得できませんでした:接続プール を使い果たし - 'maxPoolSize' および/または 'borrowConnectionTimeout' 大きくしてみてくださいDataSourceBeanに追加します。 com.atomikos.jdbc.AtomikosSQLException.throwAtomikosSQLExceptionで (AtomikosSQLException.java:46) 〜[トランザクション、JDBC-3.9.3.jar:NA] com.atomikos.jdbc.AbstractDataSourceBean.throwAtomikosSQLExceptionで (AbstractDataSourceBean.java:90 ) 〜[transactions-jdbc-3.9.3.jar:na] com.atomikos.jdbc.AbstractDataSourceBean.throwAtomikosSQLException(AbstractDataSourceBean.java:85) 〜[transactions-jdbc-3.9.3.jar:na]
そこで、我々はその後、我々は実際にそれが完全にやり過ぎのように思える、とさらに悪いことに、アプリケーションを起動し けど...できるスタックトレースにアドバイスをしてみてください、そして200以上の 、適切な数にmaxPoolSizeを増やし、 アプリケーションではあまりにも多くの接続があるのが好きではないので、 は実際には使用しません。データベース/スキーマには今すぐアクセスされます。接続プールatomikos 'dataSourceNp' - DEBUG cadatasource.pool.ConnectionPool 08:::358671ms 11のためのアイドル接続26.970 [
11:08:26.970 [0 Atomikos]我々はログに次のように表示さ Atomikos:0] DEBUG cadatasource.pool.ConnectionPool - atomikos接続プール 'dataSourceNp':357953msの接続アイドル 11:08:26.970 [Atomikos:0] DEBUG cadatasource.pool.ConnectionPool - アトミックコス接続プール 'dataSourceNp' :357947msの接続アイドル 11:08:26。935 [Atomikos:0] DEBUG cadatasource.pool.ConnectionPool - アトミックコネクションプール 'dataSourceNp':26425msのアイドル接続 11:08:26.970 [Atomikos:0] DEBUG cadatasource.pool.ConnectionPool - アトミックコスプール ' DataSourceNp ':現在のサイズ:1/4 11:08:29.983 [Atomikos:1] DEBUG cadatasource.pool.ConnectionPool - atomikos接続プール' dataSourceRolp ':プールを縮小しようとしています 11:08:29.984 [Atomikos:1 ] DEBUG cadatasource.pool.ConnectionPool - アトミック接続プール 'dataSourceRolp':接続アイドル 359790ms | (繰り返し200回...)| 接続プールatomikos 'dataSourceRolp' - DEBUG cadatasource.pool.ConnectionPool 07:::263446ms 11のアイドル接続29.983 [07:263450ms 11のアイドル接続:29.983 [1 Atomikos]接続プール 'dataSourceRolp' atomikos atomikos:1]デバッグcadatasource.pool.ConnectionPool - 接続プール 'dataSourceRolp' atomikos :07:29.983 [atomikos: 263168ms 11のアイドル接続1] DEBUG cadatasource.pool.ConnectionPool - 接続プール 「atomikos dataSourceRolp ':現在のサイズ:1/208
どのような考えですか?法的な理由から、200以上のスキーマを分離する必要があります。それ以外にも、われわれが望むように、技術的なソリューションを自由に選ぶことができます。
ありがとうございます。 JDBCインターセプターを見ていきます。データベースはMariaDBですが、基本的にMySQLのバージョンは異なります。 – CFH