Spring Boot @Async称为Synchronusly

Ale*_*fer 0 spring asynchronous spring-boot

我有一个长期运行的服务方法,我从控制器的休息调用开始.

服务:

@Service
public class TestServiceImpl implements TestService {

    @Override
    public void doSomething() {
        System.out.println("1: " + DateTime.now());
        runLongTask();
        System.out.println("2: " + DateTime.now());

    }

    @Async
    private runLongTask() {
        System.out.println("Test");
        Thread.sleep(10000);
        System.out.println("3: "+ DateTime.now());
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Application.java中我有

private int poolSize = 10;

private int queueCapacity = 10;

@Bean(name="taskExecutor")
public TaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setMaxPoolSize(this.poolSize);
    taskExecutor.setQueueCapacity(this.queueCapacity);
    taskExecutor.afterPropertiesSet();
    return new ThreadPoolTaskExecutor();
}
Run Code Online (Sandbox Code Playgroud)

当然,我的Application.java类中有@EnableAsync Annotation

所以我希望输出是这样的:

1: 2015-10-23 11:20:00
2: 2015-10-23 11:20:01
Test
3: 2015-10-23 11:20:11
Run Code Online (Sandbox Code Playgroud)

fre*_*man 7

你需要从不同的类调用方法来使用像@Async或的注释@Transactional.Spring通过代理包装带注释的方法来完成这些工作.如果您从同一个类调用方法,则它不起作用.