SSMフレームワークトランザクションロールバックの失効

4057 ワード

SSMフレームワークを使用したプロジェクト開発では、コンフィギュレーションの問題により、トランザクション管理が構成されているのに、トランザクション制御が必要なメソッドに@Transactional注釈が追加され、サービスも正常に起動して使用できるようになったが、トランザクション制御のメソッドでエラーが発生した場合、以前に実行したデータベースの変更操作は、ロールバックされませんでした.
また、トランザクション制御の失効のもう一つの顕著な表現は、データベースデータを変更する操作が直接コミットされることです.つまり、操作が実行されると、すぐにデータベースに反映されます.
トランザクション制御が有効になっていない構成.
pringmvcプロファイルスキャンパスの指定
   #      

spirng-mybatisプロファイル
#         


    
        
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
        
        
        
        
        
    

    
    
        
        
        
    

    
    
        
    

    
    

もんだいぶんせき
実はこれは私たちのトランザクション構成の問題ではなく、私たちが定義したパッケージルールの問題で、spirngmvcプロファイルではすべてのbenファイルをスキャンしましたが、springを使用してトランザクション管理を行いました.しかし、spring-mybatisプロファイルにはスキャンルールが構成されていません.
プロファイルは異なり、管理ドメインも異なります.springmvcではすべてのbeanファイルをスキャンするように構成されています.springmvc管理も含まれていますが、spring管理も含まれています.しかし、spring-mybatisファイルにはspringの構成はスキャンされていません.そのため、spring-mybatisプロファイルはspringmvcのspring管理にアクセスできません.したがって、トランザクション注釈が構成されていてもspringによって管理されず、エラーが発生してもトランザクションはロールバックされません.
問題処理
springmvcプロファイルがcontrollerディレクトリのみをスキャンし、spring-mybatisファイルにspringの構成を追加および管理するように変更します.修正後:springmvc構成Spring-mybatisプロファイルに追加・・・通常はサービス層でデータベースの操作と制御トランザクションを行うため、サービス層で処理しなければ、トランザクションを使用するパッケージのパスにpackageパスを変更するだけでよい.
親測、運転再開後、トランザクション制御の方法でエラーが発生した後、トランザクションは正常にロールバックします!
1つのメソッドにトランザクション制御が追加されている場合、このメソッドのSQL操作は、すぐにデータベースのデータを変更するのではなく、このメソッドの実行が終了すると、データベースの変更操作がコミットされます.したがって、トランザクションが有効かどうかを判断するには、エラーが発生するまで実行する必要はありません.トランザクション制御メソッド内のSQLの実行を観察するだけで、データベースデータがすぐに変更されたかどうかを判断します.変更すると、トランザクション制御が有効になっていないことを示します.逆に、トランザクション制御が有効になったことを示します.