Ich habe jetzt seit ungefähr 4 Stunden versucht, dies zu verstehen. Grundsätzlich habe ich eine Methode, bei der eine private Methode aufgerufen wird, die Threadpooltaskexecutor verwendet. < /P>
Code: Select all
public ThreadPoolTaskExecutor someTaskExecutor() {
final ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(0);
taskExecutor.setMaxPoolSize(3);
taskExecutor.setKeepAliveSeconds(60);
taskExecutor.setQueueCapacity(3);
taskExecutor.afterPropertiesSet();
return taskExecutor;}
< /code>
So verwende ich es. Machen Sie nichts aus dem "dto" und "obj", einfach zu einem Platzhalter < /p>
@Override
public void processMessage(final DTO dto) throws Exception {
log.info("MainThread BEFORE [{}] : [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
final Object obj = save(dto);
log.info("MainThread SAVED [{}] : [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
generateSomething(obj);
log.info("MainThread AFTER [{}] : [{}] - [{}]", dto.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
}
private void generateSomething(final Object obj) {
someTaskExecutor.execute(() -> {
log.info("thread START [{}] : [{}] - [{}]", obj.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
//SOME API CALL THAT TAKES 3 second
log.info("thread DONE [{}] : [{}] - [{}]", obj.getTaskId(), Thread.currentThread().getName(), Thread.currentThread().getId());
});