为什么我的方法不是异步的?

时间:2014-04-30 18:00:38

标签: java spring asynchronous

我正在尝试使用Spring 3.0提供的@Async注释创建一个异步方法

我已经完成了以下

包含在我的module-context.xml

<task:executor id="initiateContactCreation" pool-size="2-10" queue-capacity="5"/>
<task:annotation-driven executor="initiateContactCreation" />
带有@Async

带注释的方法

@Async
    private void initiateContactCreation(String fromUserId, List<String> toUsers){
        logger.info("Inside Async method for contact creation");
        ContactDetails contactDetails = new ContactDetails();
        contactDetails.setUserId(fromUserId);
        contactDetails.setContactEmailIds(toUsers.toArray(new String[toUsers.size()]));
        this.contactsAndDirSvc.addContact(contactDetails);
        logger.info("Returning from Async method for contact creation");
    }

但我发现该方法不会立即返回控件。

我的记录器显示 来自initiateContactCreation的日志然后来自addContact的日志(PS。执行此方法需要时间,我不希望它同步执行)然后从我调用的方法中记录{{1 }}

我做错了什么?

2 个答案:

答案 0 :(得分:5)

由于此方法是私有的,我假设您使用'this'引用从此类中调用此方法。 Spring无法代理在类中进行的调用。调用必须来自你的类之外,以便Spring可以拦截并应用它所做的注释和其他代理。

答案 1 :(得分:-1)

prabugp 的解释很明显,我没有更多的内容可以添加到其中。

我确实有一些链接,你应该检查Spring AOP的陷阱以及如何克服它们(也适用于你的代码)。

1234

相关问题