依赖jar中的异步注释,而不是启动新线程

时间:2016-12-02 15:15:01

标签: java spring multithreading asynchronous spring-boot

我在依赖jar中有一个类,它有一个用Spring @Async注释的方法,我希望这个方法应该在另一个线程中异步执行。

使用这个类我在父项目中创建一个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);
    }
}

这两个类被打包在一个jar中,该jar作为我的父项目中使用的依赖项。我使用这个类在父项目中创建一个bean:

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

然后在我的@Controller带注释的类中自动连接此bean:

public class ActionsController {

    @Autowired 
    private RequestLoggerService requestLogger;
}

1 个答案:

答案 0 :(得分:0)

我按照@BretC说明找到了解决方案。问题是我通过XML配置实例化RequestLoggerService bean,但使用注释@EnableAsync来启用@Async注释发现。

这无法完成,要么我需要使用注释驱动的bean创建,要么在XML配置中启用异步任务。