2016-12-02 6 views
2

私はクラス@Asyncで注釈付けされたメソッドを持つ依存関係jarのクラスを持っていますが、このメソッドは別のスレッドで非同期に実行する必要があります。新しいスレッドを開始しないで、依存関係のjarの非同期注釈

このクラスを使用して、親プロジェクトにBeanを作成し、@Serviceアノテーションを持つクラスに配線します。そのクラスでは、@Asyncアノテーションを持つメソッドを呼び出しますが、私が言ったように、このメソッドは別のスレッドでは実行されません。

どうすればこの問題を解決できますか?

これはコードです。

これは私のインタフェースクラスである:

public interface RequestLoggerService { 

    @Async 
    void log(HttpServletRequest request, String serviceName, String requestIdentifier, String message, boolean successful); 
} 

これは、実装クラスである:

public class RequestLoggerServiceImpl implements RequestLoggerService { 

    private static Logger logger = Logger.getLogger(RequestLoggerServiceImpl.class); 

    private RequestLoggerDao requestLogger; 

    @Override 
    public void log(HttpServletRequest request, String serviceName, String requestIdentifier, String message, boolean successful) { 
     logRequest(request, serviceName, request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1), requestIdentifier, message, successful); 
    } 
} 

これら二つのクラスは、私の親プロジェクトで使用される依存関係としてある瓶に詰められています。私は@BretC指示に従ったし、解決策を見つけた

public class ActionsController { 

    @Autowired 
    private RequestLoggerService requestLogger; 
} 
+0

コードに問題があります。投稿する。 –

+2

XML設定や '@ Configuration'/springブートを使用していますか?後者の場合は、@ EnableAsync'アノテーションを追加する必要があります。https://spring.io/guides/gs/async-method/ http://stackoverflow.com/questions/31401640/spring-xmlを参照してください。 -equivalent-of-enableasync for XML version – BretC

+0

これはちょっと混じっていますが、@EnableAsyncアノテーションがあります。親プロジェクトで非同期メソッドを使用してクラスを作成すると、すべてが正常に機能します。私はそれを瓶に移して、その瓶の瓶から豆を初期化しますが、それはうまくいきません。 – dplesa

答えて

0

:私は、親プロジェクト内のBeanを作成し、このクラスを使用します。

<bean id="requestLoggerService" class="com.xyz.service.RequestLoggerServiceImpl"> 
    <property name="requestLogger" ref="requestLoggerDao" /> 
</bean> 

をそして、このBeanは、自動結線私@Controller注釈付きクラスです。問題は、XML設定でRequestLoggerServiceのBeanをインスタンス化していましたが、@Asyncアノテーションの検出を有効にするためにアノテーション@EnableAsyncを使用したことでした。

これは、注釈ドリブンBeanの作成を使用するか、XML構成で非同期タスクを有効にする必要があります。

関連する問題