我在依赖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;
}
答案 0 :(得分:0)
我按照@BretC说明找到了解决方案。问题是我通过XML配置实例化RequestLoggerService
bean,但使用注释@EnableAsync来启用@Async注释发现。
这无法完成,要么我需要使用注释驱动的bean创建,要么在XML配置中启用异步任务。