1

私が見つけたもう 1 つのことは、Javars が接続プール (Spring DataSourceBuilder によって作成された) から使用可能なすべての接続を取得しているように見えることです。私は Hibernate/JPA を使用していません。JdbcTemplate を介して直接 JDBC を使用し、エンティティ クエリにはほとんど MyBatis を使用しています。

Java の ConnectionProvider にログ ステートメントを追加しました。アプリケーションの開始時にスキーマをクエリすると、4 つの接続がプルされて各テーブルがチェックされ、コミット後もそれらのいずれも返されません。 PlatformTransactionManager から。

https://stackoverflow.com/a/35147884/570291から、現在のトランザクションと同じ接続に参加することになっていることを理解しています。私は Hibernate/JPA を使用していないので、MyBatis から Javars ConnectionProvider への接続追跡などを実装して、同じ接続 (存在する場合) を返し、その後 (プールに戻る) クローズを処理する必要があるということですか?トランザクションの終わりにその接続の?

4

2 に答える 2

0

JaVers は、SQL コミットまたはロールバックを呼び出さないのと同じ理由で、アプリケーションの接続プールに接続を返しません。接続とトランザクションの管理は、JaVers ではなく、アプリケーションの責任です。Javars doc から、パッシブ モードと呼びます。

- JaVers doesn’t create JDBC connections on its own and uses connections provided by an application (via ConnectionProvider.getConnection()).
- JaVers philosophy is to use application’s transactions and never to call SQL commit or rollback commands on its own.

Thanks to this approach, data managed by an application (domain objects) and data managed by JaVers (object snapshots) can be saved to SQL database in one transaction.

JaVers プロジェクトでは mybatis のサポートがないため、mybatis 用の ConnectionProvider を独自に実装する必要があります。

の適切な実装は、すべての呼び出しConnectionProviderに対して新しい SQL 接続を作成するべきではありません。getConnection()現在のアプリケーションのトランザクションの基礎となる接続を返す必要があります。通常、これは を使用して実装されThreadLocalます。あなたが言及したように、 ConnectionProvider はトランザクションのコミットと接続のクローズを処理する必要があります。

于 2016-03-30T22:11:19.917 に答える