2016-12-02 116 views
2

我有一個依賴jar的類,它有一個用Spring @Async註解的方法,我期望這個方法應該在另一個線程中異步執行。在依賴jar中的異步註釋,沒有啓動一個新線程

使用這個類,我在我的父項目中創建一個bean並將它連接到我的類,該類有@Service註釋。在那個類中,我調用了一個有註解的方法,但正如我所說的,該方法不會在另一個線程中執行。

我該如何做到這一點?

這是代碼。

這是我的接口類:

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); 
    } 
} 

這兩個類都裝在一個罐子是在我父項目中使用的依賴。我使用這個類來創建父項目一個bean:

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

而且這個bean然後自動連線在我@Controller註解類:

public class ActionsController { 

    @Autowired 
    private RequestLoggerService requestLogger; 
} 
+0

代碼必須有問題。發表它。 –

+2

你使用XML配置還是'@ Configuration'/spring boot?如果是後者,那麼您可能需要添加'@ EnableAsync'註釋,請參閱https://spring.io/guides/gs/async-method/請參閱http://stackoverflow.com/questions/31401640/spring-xml - 對等的啓用同步的XML版本 – BretC

+0

嗯,我混了一下,但我有@EnableAsync批註...當我有我的父項目中的異步方法的類,然後一切工作正常,儘快我將它移動到jar中,並從該jar中的類初始化bean,它不起作用... – dplesa

回答

0

我跟着@BretC指令並找到了解決辦法。問題在於我通過XML配置實例化了RequestLoggerService bean,但使用註釋@EnableAsync來啓用@Async註釋發現。

無論如何,我需要使用註解驅動的bean創建,或者在XML配置中啓用異步任務。