Spring MVCでは、トランザクションをControllerレイヤに追加できます.


一般的に、事務はサービス層に加えられていますが、牛の角を突くのが好きな私はよく、事務はController層に加えてもいいかどうか考えています.私はずっと事務がサービス層だけでなく、Controller層に加わることができることを証明しようとしたが、私の考えを支持する有力な論拠が見つからず、springの公式ドキュメントを読んで実践した後、私の考えが正しいことを知った.
    spring-framework-reference.pdfドキュメントには、次のような言葉があります.
only looks for @Transactional on beans in the same application context it is defined in. This means that, if you put  in a WebApplicationContext for a DispatcherServlet, it only checks for @Transactional beans in your controllers, and not your services. 
    この文の意味は、同じアプリケーションの上下ファイルで定義されているbean上の@Transactional注釈のみを検索し、Dispatcherのアプリケーションコンテキストに置くと、サービス上の@Transactional注釈ではなく、コントローラ上の@Transactional注釈のみをチェックします.
    そこで、Spring MVCのアプリケーションコンテキスト(*-servlet.xml)にトランザクション構成を定義し、@Transactional注記をControllerに打ち込み、ついにトランザクションが機能しました.
    以上、Spring MVCでは、事務はサービス層だけでなく、Controller層にも加わることができます(これはお勧めしませんが、少なくとも私の好奇心を満たしています(*^^*)ヒヒ・・・).
転載先:http://blog.51cto.com/5880861/1544168
自分の状況を記録すると、当時は二次開発に相当し、何でも配置されていた.しかし、穴があいているのはコントロール層が1つしかなく、その時も何も感じずにコントロールについて書いていました.その結果、報告を間違えた後、事務がロールバックされていないことに気づき、気まずい思いをしました.チェックすると、プロファイルにトランザクションが配置されていて、注釈も書かれていて、ぼんやりした顔をしています.
この文章を読んでみると、自分のトランザクションはspringのプロファイル(一般的にはここに配置されています)に配置されていますが、私はcontrollerレイヤしかありません.spring-mvcのプロファイルに配置しなければなりません.構成を変えたらいいです.
また、プロジェクトはデュアルデータソースを構成しています.ここに記録しておきます.    


	







	



使うときはTransactionalを注釈するだけでいいです.しかし、1つのコントローラに2つのデータベースのトランザクションが含まれている場合は、手動でトランザクションを開くしかありません.