0

コードの非同期実行に問題があります。メソッドstartConversion()は非同期で呼び出す必要があります。呼び出しは AOP プロキシを経由します。

分離されたものはすべて正常に動作します。@Async アノテーションと @MonitoredWithSpring アノテーションを組み合わせると問題が発生します

javamelody は最初の xml の webxml で定義されています - OK

Spring非同期サポートはxmlで定義されています-OK

@MonitoredWithSpring がなくても、コードは適切に機能します。 しかし、この Bean を監視する必要があります。

サンプルコード:

@MonitoredWithSpring //L1 - if this line removed @async will work
public interface IOfficeConversionService {
    void startConversion ();
}

実装クラス

@Service
public class COfficeConversionSevice implements IOfficeConversionService {
    @Override
    @Transactional
    @Async ("officeFileConversionExecutor")
    public void startConversion () {
         //ASYNC work
    }
}   
  • L1 が存在する場合、コードはメソッド startConversion() を同期的に呼び出します。
  • L1 がなければすべて正常に動作し、メソッド startConversion() は新しいスレッドで非同期的に呼び出されます

スタックトレースでは、非同期ポイントカットも作成しないでください。@Async アノテーションは、postProcessor によって処理されることはありません。@Transactional が機能し、トランザクションが作成されます。初期化でエラーなし

春の構成

<context:annotation-config />
<aop:aspectj-autoproxy />

<task:executor id="mailexecutor" pool-size="25-100" queue-capacity="1000" rejection-policy="ABORT"  />
<task:executor id="pnpexecutor" pool-size="5"  />
<task:executor id="officeFileConversionExecutor" pool-size="5"  />
<task:scheduler id="systemScheduler" pool-size="5" />
<task:annotation-driven executor="mailexecutor" scheduler="systemScheduler"/>

手伝って頂けますか?いくつかの提案?
私はアイデアがありません。

4

0 に答える 0