1

私はSpringを複数のデータソース(複数のmysql dbにケータリング)で使用し、tomcat dbcpを使用しています。次のような奇妙な例外が発生しています

  • プロシージャが見つかりません - プロシージャがデータベースに確実に存在する場合
  • プールから借用できません - ローカル開発セットアップなので、間違いなくプールはいっぱいではありません

私が感じる問題はこれかもしれません、みんなからの入力が必要です:

で 1 つのjdbcTemplateオブジェクトを定義し、起動するspring.xml必要があるすべてのクエリで、呼び出しjdbcTemplate.setDataSource()て適切なデータソースを設定し、それを使用simplejdbccall(jdbctemplate)して proc を実行します。

複数のjdbcTemplateオブジェクト、つまり定義されたデータソースごとに 1 つも定義する必要があります。でデータソースを設定しjdbctemplate、ストアド プロシージャを実行している Bean は として定義されていprototypeます。

4

3 に答える 3

5

JdbcTemplateを変更し続ける場合は、共有を使用しないでくださいDataSource。一度設定しDataSourceて、そのままにしておきます。

つまり、複数のJdbcTemplateBeanを1つずつDataSource作成するか、オンデマンドで新しいJdbcTemplateオブジェクトを手動で作成し、それらを共有しないことを意味します。新しいものを作成する際に大きなパフォーマンスのオーバーヘッドはありませんが、それは問題ではありません。

確かにそれらを定義することはできますが、手動でprototype注入する場合はあまり意味がありません。を使用DataSourceしてインスタンス化することもできます。JdbcTemplatenew

于 2011-01-14T15:07:12.247 に答える
1

答えてくれてありがとう。毎回 jdbctemplate の新しいインスタンスを作成することで、これらのエラーを回避しました。また、最新の mysql jconnector jsr (5.1.14) に更新しました。クラスの設計は非常にシンプルになりました。カスタム作成されたSpring jdbcラッパーの新しいインスタンスを使用するベースdaoがあり、jdbcTemplateオブジェクトをインスタンス変数としてインスタンス化します。このインスタンス変数は、リクエストごとに SimpleJdbcCall の新しいインスタンスで使用されます。私のすべての dao クラスは、このベース dao から継承します。

ただし、次のような断続的なエラーがいくつかあります。

org.springframework.jdbc.support.MetaDataAccessException: DatabaseMetadata の抽出中にエラーが発生しました .... . . . 原因: org.apache.tomcat.dbcp.dbcp.PoolingDataSource.checkConnection(): 接続が閉じられています。このエラーのパターンがわかりません。各データソースの initialSize は 10 で、maxActive は 100 です。ここで何が問題になるかについてのヒントはありますか?

于 2011-01-16T18:53:21.100 に答える
0

Spring には、データ ソースを動的に切り替えるためのある程度のネイティブ サポートがあります。やり方の記事はこちらです。

以下も役立ちます

  1. Hibernate、Spring、および複数の DataSources パート 1
  2. Hibernate、Spring、および複数の DataSources パート 2
于 2011-01-16T20:02:40.943 に答える