在spring boot 1.5.4上使用jhipster,我很難獲得異步執行的後臺任務;它們似乎是使用與我配置的不同taskExecutor和線程池同步運行的。Java Spring異步執行
所有這一切都發生在一個服務,這對於bevity,就像這樣定義:
@Service
@Transactional
public class AppService {
@Scheduled(fixedDelay = 3000)
public void consumeData() {
// connect to a subscriber and push data to the workerBee
for(Tuple data : this.getTuples()) {
workerBee(data);
}
}
@Timed
@Async
public void workerBee(Tuple data) throws Exception {
// ... do something that takes 300ms ....
Thread.sleep(300);
}
}
可以說,服務是不是對這項工作的理想場所,但出於演示的目的,它適合。
(也順便說一句,它apears @Timed不工作,但我讀的地方,@Timed不工作時,在服務中內部調用)
的application.yml
有關章節:
jhipster:
async:
core-pool-size: 8
max-pool-size: 64
queue-capacity: 10000
使用缺省值生成AsyncConfiguration.java,它看起來像這樣:
@Override
@Bean(name = "taskExecutor")
public Executor getAsyncExecutor() {
log.debug("Creating Async Task Executor");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(jHipsterProperties.getAsync().getCorePoolSize());
executor.setMaxPoolSize(jHipsterProperties.getAsync().getMaxPoolSize());
executor.setQueueCapacity(jHipsterProperties.getAsync().getQueueCapacity());
executor.setThreadNamePrefix("app-Executor-");
return new ExceptionHandlingAsyncTaskExecutor(executor);
}
我已經驗證了taskExecutor豆是越來越創建正在被liquibase使用。
當我連接visualvm時,我看到所有在pool-2-thread-1
中發生的工作,這些工作肯定是某種默認的,很明顯,工作是同步發生的,而不是異步的。
事情我已經嘗試:
- 指定遺囑執行人在@Async註釋像
@Async("taskExecutor")
- 驗證了taskExecutor的配置與核心池大小的8個線程。
- 驗證應用程序是否具有@EnableAsync註釋(默認情況下爲它)。
我沒有看到你在這裏做除了去掉ExceptionHandlingAsyncTaskExecutor包裝輪執行什麼。爲什麼會/應該有幫助? –
忽略答案我只知道你正在使用jhipster –