コードの非同期実行に問題があります。メソッド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"/>
手伝って頂けますか?いくつかの提案?
私はアイデアがありません。