久しぶりのリスナー初発信者。
一般的なトランザクション ロジックを含む AbstractService.java クラスがあります。このクラスのすべてのメソッドがトランザクションに対応しているわけではありません。かつては、Spring の @Transactional アノテーションが付けられています。
現在、AbstractService の各実装は、異なるトランザクション マネージャーを持つ可能性があります。これは、抽象クラスのメソッドをオーバーライドすることで具象クラスで構成でき、別の tx マネージャーを提供します。
@Transactional(値=TRANSACTION_MANAGER)
「アノテーション属性 Transactional.value の値は定数式でなければならない」ため、抽象クラスにトランザクション マネージャ名を渡すことはできません。
私の知る限り、トランザクションマネージャーを構成するには2つの方法があります。
スーパーメソッドを呼び出すためだけに、具象クラスのすべての @Transactional メソッドをオーバーライドします。
@Transactional(timeout = 60, value = TRANSACTION_MANAGER) @Override public String editEntity(Integer id, Integer columnPosition, Object value) { return super.editEntity(id, columnPosition, value);
代わりに、クラス レベルで @Transactional アノテーションを追加してください。これにより、非トランザクション メソッドがトランザクション内で処理されるようになり、非トランザクション メソッドが他のトランザクション メソッドを呼び出すと、ネストされた tx スープができあがります。
3番目のオプションはありますか? 現在非推奨のスプリング テスト@NotTransactionalのようなものは、上記のオプション 2 と一緒にトリックを実行します。
ほぼ 3 年前に非常によく似た質問がありました。それ以来、Spring で多くのことが起こったので、別の選択肢はありますか?
それはきちんとしていますが、カスタム注釈の回答は質問に対処していません。
私の質問は次のように要約できます。
トランザクションマネージャーを指定するためだけにすべてのトランザクションメソッドをオーバーライドすることなく、トランザクションを構成するにはどうすればよいですか?