同步调用Spring Boot@Async

同步调用Spring Boot@Async,spring,asynchronous,spring-boot,Spring,Asynchronous,Spring Boot,我有一个长时间运行的服务方法,我从控制器的rest调用开始 服务: @Service public class TestServiceImpl implements TestService { @Override public void doSomething() { System.out.println("1: " + DateTime.now()); runLongTask(); System.out.println("2:

我有一个长时间运行的服务方法,我从控制器的rest调用开始

服务:

@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());
    }
}
在我的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();
}
当然,我在Application.java类中有@EnableAsync注释

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

1: 2015-10-23 11:20:00
2: 2015-10-23 11:20:01
Test
3: 2015-10-23 11:20:11

您需要从不同的类调用方法来使用注释,如
@Async
@Transactional
。Spring通过代理包装带注释的方法来实现这一点。如果从同一个类调用方法,则该方法无效。

根据,您需要在
配置
类中实现
异步配置器
接口(在这种情况下,我假设是您的
应用程序
实例),以覆盖
SimpleAsyncTaskExecutor

文档中还显示了完整示例:

 @Configuration
 @EnableAsync
 public class AppConfig implements AsyncConfigurer {

 @Bean
 public MyAsyncBean asyncBean() {
     return new MyAsyncBean();
 }

 @Override
 public Executor getAsyncExecutor() {
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
     executor.setCorePoolSize(7);
     executor.setMaxPoolSize(42);
     executor.setQueueCapacity(11);
     executor.setThreadNamePrefix("MyExecutor-");
     executor.initialize();
     return executor;
 }

 @Override
 public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
         return MyAsyncUncaughtExceptionHandler();
 }
}
嗯,

何塞·路易斯