Fiz o um serviço @Async(“taskExecutor”), ai ele entra no serviço. Até ai tudo. bem;
@Transactional
@Async("taskExecutor")
void run(PdfReader pdfReader, Usuario usuarioLogado, byte[] bytes, String contentType, String nomeArquivo, long tamanhoArquivo) {
metodo
}
Com arquivo pequenos, o procedimento é rapido e eu consigo navegar em outras telas. Mas se aarquivo tem por exemplo 1 Mb. O processo acaba. Mas se eu entro em outra página o sistema trava.
Ele não deveria ficar em outro processo ?
Em teoria deveria, como estão as suas configurações do async?
Eu geralmente configuro da seguinte forma:
Crio uma classe que implementa o TaskDecorator (Ela é responsável por tratar separadamente os contextos de cada thread):
public class MdcTaskDecorator implements TaskDecorator {
@Override
public Runnable decorate(Runnable runnable) {
var requestAttributes = RequestContextHolder.currentRequestAttributes();
var contextMap = MDC.getCopyOfContextMap();
return () -> {
try {
RequestContextHolder.setRequestAttributes(requestAttributes);
MDC.setContextMap(contextMap);
runnable.run();
} finally {
MDC.clear();
RequestContextHolder.resetRequestAttributes();
}
};
}
}
Configuro uma classe para habilitar o uso do async criando um pool de thread’s:
@EnableAsync
@Configuration
public class AsyncConfiguration {
@Bean
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setTaskDecorator(new MdcTaskDecorator());
executor.setThreadNamePrefix("asyncPoolExecutor-");
executor.initialize();
return executor;
}
}
Depois só chamo em qualquer método:
@Async
public void processAsync() {
...
}
Tenta configurar um TaskDecorador no bean do seu Executor e veja se muda o comportamento.
Provavelmente é porquê você não está manipulando os contextos, mas isso não chega a ser algo essencial, remove ele do seu TaskDecorator!
Exemplo:
public class MdcTaskDecorator implements TaskDecorator {
@Override
public Runnable decorate(Runnable runnable) {
return () -> {
try {
runnable.run();
} catch (Exception ex) {
throw ex;
}
};
}
}
1 curtida
fica preso do mesmo jeito
Ele trava é só inicia um outro processo, quando o primeiro termina. Isso não poderia acontecer.
Muito estranho, deve ter alguma coisa impactando nisso ainda 