私はデータソースBeanをSpringコンテキストで初期化しました。私はどのような方法を使うべきだろうか?なぜ私はちょうどdataSource.getConnection()を書くことができないのですか?DataSourceUtils.getConnectionとDataSource.getConnectionとの比較
答えて
重要な違いが1つあります。dataSource.getConnection()
は、常にdataSourceまたは接続プールから取得した新しい接続を返します。 DataSourceUtils.getConnection()
は、現在のスレッドのアクティブなトランザクションがあるかどうかをチェックします。存在する場合、このトランザクションとの接続を返します。存在しない場合は、dataSource.getConnection()
と全く同じように動作します。
DataSourceUtils.getConnection()
を使用する場合は注意が必要です。アクティブなトランザクションの接続が返された場合、誰かがそのトランザクションをオープンした人の責任であるため、他の誰かがクローズすることを意味します。一方、データソースから新しい接続を返す場合は、コミット/ロールバック/クローズする必要があります。
DataSourceUtils#getConnection()
なぜそれを使用したいのかを明確に文書化しています。特に、生のSQL例外とは異なりSpring JDBC例外階層を使用し、Springのトランザクション管理機能に参加します。これら2つの機能のいずれかが必要ない場合は、DataSource#getConnection()
を使用してコードを取得してください。
トランザクションを実行していて、 'dataSource.getConnection()'によって接続が取得された場合、その接続は現在のトランザクションにバインドされませんか? –
- 1. DataSource.getConnectionとのUserTransaction()とDataSourceUtils.getConnection
- 2. Googleアナリティクスとリアルタイムアナリティクスの比較:ChartbeatとClickyとMixpanelの比較
- 3. カウントループと比較
- 4. コピーデータと比較
- 5. 比較条件と比較条件
- 6. MySQLの比較と '%'
- 7. OrElseとの比較
- 8. プライベートインターフェイスとの比較
- 9. ViewStateとクッキーとの比較対キャッシュの比較
- 10. MPI_IprobeとMPI_Probeとの比較
- 11. BroadcastReceiver.getResultsExtra()とIntent.getExtras()との比較
- 12. FuzzyとSeleniumとの比較
- 13. NULLとINTとの比較
- 14. React.ComponentとReact.PureComponentとの比較
- 15. File.Delete()とFileInfo.Delete()との比較
- 16. iosとjsonとの比較
- 17. ELとequalIgnoreCaseとの比較
- 18. OnItemClickListenerとOnItemTouchListenerとの比較
- 19. AXとゼロとの比較
- 20. mapsqlparametersourceとjava.util.mapとの比較
- 21. HttpContextとHttpListenerContextとの比較
- 22. Display.asyncExecとDisplay.timerExecとの比較
- 23. PHPとWordPressとの比較
- 24. BufferedOutputStreamとByteArrayOutputStreamとの比較
- 25. momentjsとタイムゾーンとの比較
- 26. NullReferenceExceptionとMSILとの比較
- 27. IDeserializationCallbackとOnDeserializedAttributeとの比較
- 28. モンテカルロ法と進化的アルゴリズムの比較と比較
- 29. 翡翠テンプレートと口ひげテンプレートの比較と比較
- 30. ループと比較arrylist
トランザクションを実行していて、 'dataSource.getConnection()'によって接続が取得された場合、その接続は現在のトランザクションにバインドされませんか? –
@mishanesterenkoいいえ、dataSource.getConnection()は、データベースから直接、またはアクティブなトランザクションのないプールから、常に新しい接続を返します。 – mrembisz
'DataSourceUtils.releaseConnection()'のjavadocから、「与えられたDataSourceから取得したConnectionを、外部(つまりスレッドにバインドされていない)で管理していない場合、Closeします。これは、(DataSourceUtils.getConnection()から取得した)接続を使用した後にこのメソッドを呼び出すことは常に安全であり、接続が実際のトランザクションに参加したかどうかについての知識は必要ありません。 –